Градиентная заливка полигонов или Ваши предложения

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
SPunkY
Интересующийся
Сообщения: 18
Зарегистрирован: 07 ноя 2012, 08:30
Репутация: 0

Градиентная заливка полигонов или Ваши предложения

Сообщение SPunkY » 22 ноя 2013, 10:00

Доброго времени суток!

Есть Openlayers карта, есть json, приходящий с GeoServer-a, и задача раскрасить карту в соответствии, например, с температурой воздуха. Значит выполнил триангуляцию, построил много треугольных полигонов, раскрасил их в зависимости от среднего значения температур в точках составляющих полигон. Теперь задача каким то образом сгладить углы этих треугольников. Посоветуйте чего нибудь хорошего, пожалуйста! :D

По поводу градиентной заливки, не удалось что либо найти, если это вообще возможно, подскажите как это сделать :)

Изображение

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Градиентная заливка полигонов или Ваши предложения

Сообщение Максим Дубинин » 22 ноя 2013, 10:40

нужен растр, а не вектор
пристегивайтесь, турбулентность прямо по курсу

Донецков
Гуру
Сообщения: 3058
Зарегистрирован: 19 май 2010, 19:44
Репутация: 189

Re: Градиентная заливка полигонов или Ваши предложения

Сообщение Донецков » 22 ноя 2013, 12:59

либо попробуйте другой тип интерполяции вместо триангуляции...

SPunkY
Интересующийся
Сообщения: 18
Зарегистрирован: 07 ноя 2012, 08:30
Репутация: 0

Re: Градиентная заливка полигонов или Ваши предложения

Сообщение SPunkY » 27 ноя 2013, 10:47

Создал WMS-слой, теперь, полагаю, ему нужен правильный SLD-стиль.
Нашел примеры стилей, с очень похожими на желаемый результат картинками http://docs.geoserver.org/stable/en/use ... sters.html
Добавил стиль в GeoServer, указал его в свойствах слоя и... ничего. Розовые квадраты. Собственно вопрос, что я не так сделал? (другие стили, например показать точки красными квадратами, работают исправно)

Vladimir_R
Активный участник
Сообщения: 145
Зарегистрирован: 14 апр 2010, 14:11
Репутация: 44
Откуда: Екатеринбург

Re: Градиентная заливка полигонов или Ваши предложения

Сообщение Vladimir_R » 27 ноя 2013, 10:55

нужен растр, а не вектор
Если внимательнее почитаете текст по ссылке, которую вы приводите, то поймете почему стиль не применяется.
Что из себя представляет json? Какие данные в нем?

SPunkY
Интересующийся
Сообщения: 18
Зарегистрирован: 07 ноя 2012, 08:30
Репутация: 0

Re: Градиентная заливка полигонов или Ваши предложения

Сообщение SPunkY » 27 ноя 2013, 11:08

Именно по этому я
SPunkY писал(а):Создал WMS-слой, ...

Код: Выделить всё

wms_gis_synop_all = new OpenLayers.Layer.WMS('wms_gis_synop_all',
'http://service.meteo.ru:8080/geoserver/wms', {
layers: 'gis_synop_all', transparent: true, format: 'image/png',
...
});
и он, по крайней мере выглядит, довольно таки растровым :D

вот кусочек..
Изображение
Последний раз редактировалось SPunkY 27 ноя 2013, 11:16, всего редактировалось 1 раз.

Vladimir_R
Активный участник
Сообщения: 145
Зарегистрирован: 14 апр 2010, 14:11
Репутация: 44
Откуда: Екатеринбург

Re: Градиентная заливка полигонов или Ваши предложения

Сообщение Vladimir_R » 27 ноя 2013, 11:13

Исходные данные должны быть растровыми для применения стилей описанных по ссылке. WMS, а вернее ответ на запрос getMap является результатом рендеренга.

SPunkY
Интересующийся
Сообщения: 18
Зарегистрирован: 07 ноя 2012, 08:30
Репутация: 0

Re: Градиентная заливка полигонов или Ваши предложения

Сообщение SPunkY » 27 ноя 2013, 12:30

То есть, имея лишь GeoServer и OpenLayers плавных переходов добиться не удастся?
Тогда такой вопрос. Можно ли каким то образом закруглить углы полигонов?
Получить что то вроде:
Изображение

Vladimir_R
Активный участник
Сообщения: 145
Зарегистрирован: 14 апр 2010, 14:11
Репутация: 44
Откуда: Екатеринбург

Re: Градиентная заливка полигонов или Ваши предложения

Сообщение Vladimir_R » 27 ноя 2013, 12:43

Все зависит от данных. Вопрос источника и формата. Можно написать стиль для geoserver

SPunkY
Интересующийся
Сообщения: 18
Зарегистрирован: 07 ноя 2012, 08:30
Репутация: 0

Re: Градиентная заливка полигонов или Ваши предложения

Сообщение SPunkY » 27 ноя 2013, 13:45

Спасибо! надеюсь получится.. :D

SPunkY
Интересующийся
Сообщения: 18
Зарегистрирован: 07 ноя 2012, 08:30
Репутация: 0

Re: Градиентная заливка полигонов или Ваши предложения

Сообщение SPunkY » 10 дек 2013, 17:36

Воспользовался советом, получилась вот такая красота:
Изображение

Но, очень хочется добиться еще большей гладкости! подскажите пожалуйста, что не так? :D

sld выглядит так:

Код: Выделить всё

<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
    xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
    xmlns="http://www.opengis.net/sld"
    xmlns:ogc="http://www.opengis.net/ogc"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <NamedLayer>
   <Name>Heatmap</Name>
   <UserStyle>
     <Title>Heatmap</Title>
     <Abstract>A heatmap surface showing population density</Abstract>
     <FeatureTypeStyle>
       <Transformation>
         <ogc:Function name="gs:Heatmap">
           <ogc:Function name="parameter">
             <ogc:Literal>data</ogc:Literal>
           </ogc:Function>
           <ogc:Function name="parameter">
             <ogc:Literal>weightAttr</ogc:Literal>
             <ogc:Literal>tempdbmn</ogc:Literal>
           </ogc:Function>
           <ogc:Function name="parameter">
             <ogc:Literal>radiusPixels</ogc:Literal>
             <ogc:Function name="env">
               <ogc:Literal>radius</ogc:Literal>
               <ogc:Literal>550</ogc:Literal>
             </ogc:Function>
           </ogc:Function>
           <ogc:Function name="parameter">
             <ogc:Literal>pixelsPerCell</ogc:Literal>
             <ogc:Literal>30</ogc:Literal>
           </ogc:Function>
           <ogc:Function name="parameter">
             <ogc:Literal>outputBBOX</ogc:Literal>
             <ogc:Function name="env">
               <ogc:Literal>wms_bbox</ogc:Literal>
             </ogc:Function>
           </ogc:Function>
           <ogc:Function name="parameter">
             <ogc:Literal>outputWidth</ogc:Literal>
             <ogc:Function name="env">
               <ogc:Literal>wms_width</ogc:Literal>
             </ogc:Function>
           </ogc:Function>
           <ogc:Function name="parameter">
             <ogc:Literal>outputHeight</ogc:Literal>
             <ogc:Function name="env">
               <ogc:Literal>wms_height</ogc:Literal>
             </ogc:Function>
           </ogc:Function>
         </ogc:Function>
       </Transformation>
      <Rule>
        <RasterSymbolizer>
        <!-- specify geometry attribute to pass validation -->
          <Geometry>
            <ogc:PropertyName>the_geom</ogc:PropertyName></Geometry>
          <Opacity>0.6</Opacity>
          <ColorMap type="ramp" >
            <ColorMapEntry color="#0002ff" quantity="0.00" />
            <ColorMapEntry color="#003cff" quantity="0.05" />
            <ColorMapEntry color="#0072ff" quantity="0.10" />
            <ColorMapEntry color="#0095ff" quantity="0.15" />
            <ColorMapEntry color="#00b2ff" quantity="0.20" />
            <ColorMapEntry color="#00c1ff" quantity="0.25" />
            <ColorMapEntry color="#00e8ff" quantity="0.30" />
            <ColorMapEntry color="#00f3ff" quantity="0.35" />
            <ColorMapEntry color="#00ffd6" quantity="0.40" />
            <ColorMapEntry color="#00ff9d" quantity="0.45" />
            <ColorMapEntry color="#00ff65" quantity="0.50" />
            <ColorMapEntry color="#00ff2d" quantity="0.55" />
            <ColorMapEntry color="#2fff00" quantity="0.60" />
            <ColorMapEntry color="#adff00" quantity="0.65" />
            <ColorMapEntry color="#e4ff00" quantity="0.70" />
            <ColorMapEntry color="#fffa00" quantity="0.75" />
            <ColorMapEntry color="#ffed00" quantity="0.80" />
            <ColorMapEntry color="#ffb100" quantity="0.85" />
            <ColorMapEntry color="#ff7b00" quantity="0.90" />
            <ColorMapEntry color="#ff3d00" quantity="0.95" />
            <ColorMapEntry color="#ff0800" quantity="1.00" />
          </ColorMap>
        </RasterSymbolizer>
       </Rule>
     </FeatureTypeStyle>
   </UserStyle>
 </NamedLayer>
</StyledLayerDescriptor>
параметры radiusPixels и pixelsPerCell крутил и так и эдак, при значениях 550 и 30 соответственно, вроде бы наилучший результат, но все равно не хорошо..

SPunkY
Интересующийся
Сообщения: 18
Зарегистрирован: 07 ноя 2012, 08:30
Репутация: 0

Re: Градиентная заливка полигонов или Ваши предложения

Сообщение SPunkY » 13 дек 2013, 16:58

Разобрался!

Если создавать слой вот так:

Код: Выделить всё

gis_climat_all_wms = new OpenLayers.Layer.WMS( "gts:gis_climat_all_wms", "http://service.meteo.ru:8080/MyGeoServer/gts/wms",
	{LAYERS: 'gts:gis_climat_all', STYLES: '', format: 'image/png', transparent: true,
	filter: '<Filter xmlns="http://www.opengis.net/ogc"><And><PropertyIsEqualTo><PropertyName>qtempdbmn</PropertyName><Literal>1</Literal></PropertyIsEqualTo><PropertyIsBetween><PropertyName>date_obs</PropertyName><LowerBoundary><Literal>2013-10-01T00:00:00Z</Literal></LowerBoundary><UpperBoundary><Literal>2013-10-01T00:00:00Z</Literal></UpperBoundary></PropertyIsBetween></And></Filter>',
	},
	{singleTile: true, ratio: 1, isBaseLayer: false, yx : {'EPSG:4326' : true}}
);
map.addLayers([gis_climat_all_wms]);
все работает! :D
Изображение

Спасибо за ответы, особенно за ссылку про WPS.

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей