Страница 1 из 1

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

Добавлено: 22 ноя 2013, 10:00
SPunkY
Доброго времени суток!

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

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

Изображение

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

Добавлено: 22 ноя 2013, 10:40
Максим Дубинин
нужен растр, а не вектор

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

Добавлено: 22 ноя 2013, 12:59
Донецков
либо попробуйте другой тип интерполяции вместо триангуляции...

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

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

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

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

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

Добавлено: 27 ноя 2013, 11:08
SPunkY
Именно по этому я
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

вот кусочек..
Изображение

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

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

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

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

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

Добавлено: 27 ноя 2013, 12:43
Vladimir_R
Все зависит от данных. Вопрос источника и формата. Можно написать стиль для geoserver

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

Добавлено: 27 ноя 2013, 13:45
SPunkY
Спасибо! надеюсь получится.. :D

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

Добавлено: 10 дек 2013, 17:36
SPunkY
Воспользовался советом, получилась вот такая красота:
Изображение

Но, очень хочется добиться еще большей гладкости! подскажите пожалуйста, что не так? :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 соответственно, вроде бы наилучший результат, но все равно не хорошо..

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

Добавлено: 13 дек 2013, 16:58
SPunkY
Разобрался!

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

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

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.