呈现转换

呈现转换 允许对地理服务器呈现管道中的数据集执行处理。典型的转换从输入数据计算派生或聚合的结果,从而获得各种有用的可视化效果。转换可以将数据从一种格式转换为另一种格式(即矢量到栅格或反之亦然),以提供适当的显示格式。

下表列出了geoserver中可用的各种渲染转换的示例:

Type

Examples

栅格到矢量

轮廓 从DEM栅格提取轮廓。 RasterAsPointCollections 从多波段栅格中提取矢量场

矢量到栅格

BarnesSurfaceInterpolation 从分散的数据点计算曲面。 热图 从加权数据点计算一个热图面。

矢量到矢量

PointStacker 将密集点数据聚集到集群中。

渲染转换在SLD样式中调用。可以提供参数来控制输出的外观。通过将SLD中的样式规则和符号应用于转换结果,生成层的渲染输出。

渲染转换的实现机制与 工艺食谱 .因此,如果需要,它们也可以通过WPS协议执行。相反,只要输入和输出适合在SLD中使用,任何WPS进程都可以作为转换执行。

本节是在geoserver中呈现转换用法的一般指南。有关任何特定渲染转换的输入、参数和输出的详细信息,请参阅其自己的文档。

安装

使用呈现转换需要安装WPS扩展。参见 安装WPS扩展 .

备注

WPS服务不需要 启用 使用渲染转换。为了避免不必要的服务器资源消耗,如果不直接使用WPS服务,可能需要禁用它。

使用

通过添加 <Transformation> 元素到a <FeatureTypeStyle> SLD文档中的元素。此元素指定转换过程的名称,通常包括控制转换操作的参数值。

这个 <Transformation> 元素语法利用ogc过滤器函数语法。元素的内容是 <ogc:Function> 具有呈现转换过程的名称。转换过程可以接受一些参数,这些参数可以是必需的(在这种情况下必须指定),也可以是可选的(在这种情况下,如果默认值是可接受的,则可以省略这些参数)。参数以名称/值对的形式提供。每个参数的名称和值通过另一个函数提供 <ogc:Function name="parameter"> .此函数的第一个参数是 <ogc:Literal> 包含参数的名称。以下可选参数提供参数的值(如果有)。有些参数只接受一个值,而另一些参数可能接受一个值列表。与任何筛选函数参数一样,可以通过以下几种方式提供值:

  • 作为文本值

  • 作为计算表达式

  • 作为一个SLD环境变量,其实际值在WMS请求中提供(请参见 SLD中的变量替换

  • 作为预定义的SLD环境变量(允许获取当前请求的值,如输出图像宽度和高度)。

所提供参数的顺序不重要。

大多数渲染转换都将要转换的数据集作为输入。这是通过一个没有指定值的特殊命名参数提供的。参数的名称由正在使用的特定转换确定。执行转换时,输入数据集通过此参数传递给它。

输入数据集由用于所有WMS请求的相同查询机制确定,因此可以根据需要在请求中进行筛选。

在渲染转换中,将featureType(矢量数据集)作为输入并将其转换为栅格数据集,为了通过验证,SLD需要提到输入数据集的几何属性(即使未使用)。这是通过在符号中指定属性名来完成的。 <Geometry> 元素。

渲染转换的输出使用与其格式相适应的符号设置样式: PointSymbolizerLineSymbolizerPolygonSymbolizerTextSymbolizer 对于矢量数据,以及 RasterSymbolizer 用于栅格覆盖数据。

如果希望以其原始形式或以其他方式转换输入数据集,则有两种选择:

  • 另一 <FeatureTypeStyle> 可用于同一SLD

  • 可以创建另一个SLD,该层使用不同的SLD显示两次

笔记

  • 渲染变换可能无法在平铺模式下正常工作,除非它们是专门为适应该模式而编写的。

实例

轮廓提取

ras:Contour 是一个 Raster-to-Vector 渲染变换,从栅格DEM中提取指定级别的轮廓线。下面的SLD调用转换并将轮廓样式设置为黑线。

 1  <?xml version="1.0" encoding="ISO-8859-1"?>
 2  <StyledLayerDescriptor version="1.0.0"
 3    xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
 4    xmlns="http://www.opengis.net/sld"
 5    xmlns:ogc="http://www.opengis.net/ogc"
 6    xmlns:xlink="http://www.w3.org/1999/xlink"
 7    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 8    <NamedLayer>
 9      <Name>contour_dem</Name>
10      <UserStyle>
11        <Title>Contour DEM</Title>
12        <Abstract>Extracts contours from DEM</Abstract>
13        <FeatureTypeStyle>
14          <Transformation>
15            <ogc:Function name="ras:Contour">
16              <ogc:Function name="parameter">
17                <ogc:Literal>data</ogc:Literal>
18              </ogc:Function>
19              <ogc:Function name="parameter">
20                <ogc:Literal>levels</ogc:Literal>
21                <ogc:Literal>1100</ogc:Literal>
22                <ogc:Literal>1200</ogc:Literal>
23                <ogc:Literal>1300</ogc:Literal>
24                <ogc:Literal>1400</ogc:Literal>
25                <ogc:Literal>1500</ogc:Literal>
26                <ogc:Literal>1600</ogc:Literal>
27                <ogc:Literal>1700</ogc:Literal>
28                <ogc:Literal>1800</ogc:Literal>
29              </ogc:Function>
30            </ogc:Function>
31          </Transformation>
32          <Rule>
33            <Name>rule1</Name>
34            <Title>Contour Line</Title>
35            <LineSymbolizer>
36              <Stroke>
37                <CssParameter name="stroke">#000000</CssParameter>
38                <CssParameter name="stroke-width">1</CssParameter>
39              </Stroke>
40            </LineSymbolizer>
41            <TextSymbolizer>
42              <Label>
43                <ogc:PropertyName>value</ogc:PropertyName>
44              </Label>
45              <Font>
46                <CssParameter name="font-family">Arial</CssParameter>
47                <CssParameter name="font-style">Normal</CssParameter>
48                <CssParameter name="font-size">10</CssParameter>
49              </Font>
50              <LabelPlacement>
51                <LinePlacement/>
52              </LabelPlacement>
53              <Halo>
54                <Radius>
55                  <ogc:Literal>2</ogc:Literal>
56                </Radius>
57                <Fill>
58                  <CssParameter name="fill">#FFFFFF</CssParameter>
59                  <CssParameter name="fill-opacity">0.6</CssParameter>
60                </Fill>
61              </Halo>
62              <Fill>
63                <CssParameter name="fill">#000000</CssParameter>
64              </Fill>
65              <Priority>2000</Priority>
66              <VendorOption name="followLine">true</VendorOption>
67              <VendorOption name="repeat">100</VendorOption>
68              <VendorOption name="maxDisplacement">50</VendorOption>
69              <VendorOption name="maxAngleDelta">30</VendorOption>
70            </TextSymbolizer>
71          </Rule>
72        </FeatureTypeStyle>
73      </UserStyle>
74    </NamedLayer>
75   </StyledLayerDescriptor>

SLD的关键方面包括:

  • Lines 14-15 使用该过程定义渲染转换 ras:Contour .

  • Lines 16-18 提供输入数据参数,名为 data 在这个过程中。

  • Lines 19-29 为流程提供值 levels 参数,指定要提取的轮廓的高程。

  • Lines 35-40 指定 LineSymbolizer 设置轮廓线样式。

  • Lines 41-70 指定 TextSymbolizer 以显示沿直线的轮廓级别。

使用此转换的结果显示在以下地图图像中(也显示了基础DEM栅格):

../../../_images/transform_contour_sf_dem.png

产生热量

vec:Heatmap 是一个 Vector-to-Raster 从加权点数据生成热图表面的渲染转换。以下SLD在具有点几何图形和属性的FeatureType上调用heatmap呈现转换 pop2000 提供点的权重(在本例中,使用世界城市区域的数据集)。在输出数据值范围内使用颜色渐变对输出进行样式化。 [0…一] .

 1   <?xml version="1.0" encoding="ISO-8859-1"?>
 2   <StyledLayerDescriptor version="1.0.0"
 3       xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
 4       xmlns="http://www.opengis.net/sld"
 5       xmlns:ogc="http://www.opengis.net/ogc"
 6       xmlns:xlink="http://www.w3.org/1999/xlink"
 7       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 8     <NamedLayer>
 9       <Name>Heatmap</Name>
10       <UserStyle>
11         <Title>Heatmap</Title>
12         <Abstract>A heatmap surface showing population density</Abstract>
13         <FeatureTypeStyle>
14           <Transformation>
15             <ogc:Function name="vec:Heatmap">
16               <ogc:Function name="parameter">
17                 <ogc:Literal>data</ogc:Literal>
18               </ogc:Function>
19               <ogc:Function name="parameter">
20                 <ogc:Literal>weightAttr</ogc:Literal>
21                 <ogc:Literal>pop2000</ogc:Literal>
22               </ogc:Function>
23               <ogc:Function name="parameter">
24                 <ogc:Literal>radiusPixels</ogc:Literal>
25                 <ogc:Function name="env">
26                   <ogc:Literal>radius</ogc:Literal>
27                   <ogc:Literal>100</ogc:Literal>
28                 </ogc:Function>
29               </ogc:Function>
30               <ogc:Function name="parameter">
31                 <ogc:Literal>pixelsPerCell</ogc:Literal>
32                 <ogc:Literal>10</ogc:Literal>
33               </ogc:Function>
34               <ogc:Function name="parameter">
35                 <ogc:Literal>outputBBOX</ogc:Literal>
36                 <ogc:Function name="env">
37                   <ogc:Literal>wms_bbox</ogc:Literal>
38                 </ogc:Function>
39               </ogc:Function>
40               <ogc:Function name="parameter">
41                 <ogc:Literal>outputWidth</ogc:Literal>
42                 <ogc:Function name="env">
43                   <ogc:Literal>wms_width</ogc:Literal>
44                 </ogc:Function>
45               </ogc:Function>
46               <ogc:Function name="parameter">
47                 <ogc:Literal>outputHeight</ogc:Literal>
48                 <ogc:Function name="env">
49                   <ogc:Literal>wms_height</ogc:Literal>
50                 </ogc:Function>
51               </ogc:Function>
52             </ogc:Function>
53           </Transformation>
54          <Rule>
55            <RasterSymbolizer>
56            <!-- specify geometry attribute to pass validation -->
57              <Geometry>
58                <ogc:PropertyName>the_geom</ogc:PropertyName></Geometry>
59              <Opacity>0.6</Opacity>
60              <ColorMap type="ramp" >
61                <ColorMapEntry color="#FFFFFF" quantity="0" label="nodata"
62                  opacity="0"/>
63                <ColorMapEntry color="#FFFFFF" quantity="0.02" label="nodata"
64                  opacity="0"/>
65                <ColorMapEntry color="#4444FF" quantity=".1" label="nodata"/>
66                <ColorMapEntry color="#FF0000" quantity=".5" label="values" />
67                <ColorMapEntry color="#FFFF00" quantity="1.0" label="values" />
68              </ColorMap>
69            </RasterSymbolizer>
70           </Rule>
71         </FeatureTypeStyle>
72       </UserStyle>
73     </NamedLayer>
74    </StyledLayerDescriptor>

SLD的关键方面包括:

  • Lines 14-15 使用该过程定义渲染转换 vec:Heatmap .

  • Lines 16-18 提供输入数据参数,名为 data 在这个过程中。

  • Lines 19-22 为流程的 weightAttr 参数,指定为每个数据点提供权重的输入属性。

  • Lines 23-29 提供的值 radiusPixels 参数,控制热图在每个点周围的“扩散”。在这个SLD中,这个参数的值可以由一个名为 radius ,默认值为 100 像素。

  • Lines 30-33 提供 pixelsPerCell 参数,用于控制计算热图栅格的分辨率。

  • Lines 34-38 提供 outputBBOX 参数,给定标准SLD环境变量的值 wms_bbox .

  • Lines 40-45 提供 outputWidth 参数,给定标准SLD环境变量的值 wms_width .

  • Lines 46-52 提供 outputHeight 参数,给定标准SLD环境变量的值 wms_height .

  • Lines 55-70 指定 RasterSymbolizer 设置计算的栅格曲面的样式。符号包含数据范围的渐变颜色映射 [0..1] .

  • 第58行 指定输入featureType的几何属性,这是通过SLD验证所必需的。

此转换将对图层进行样式设置,以在请求的地图范围内为数据生成heatmap曲面,如下图所示。(地图图像还显示了由另一个SLD设计的原始输入数据点,以及一个基础地图层。)

../../../_images/heatmap_urban_us_east.png

使用Jiffle动态运行地图代数

这个 Jiffle 渲染转换允许使用 Jiffle language .例如,以下样式从13个波段sentinel 2图像中计算出ndvi索引,其中红色和nir波段是第四和八个波段(jiffle波段索引是基于零的),然后用颜色图显示结果索引:

 1<?xml version="1.0" encoding="UTF-8"?>
 2<StyledLayerDescriptor 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" xsi:schemaLocation="http://www.opengis.net/sld
 3http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd" version="1.0.0">
 4  <NamedLayer>
 5    <Name>Sentinel2 NDVI</Name>
 6    <UserStyle>
 7      <Title>NDVI</Title>
 8      <FeatureTypeStyle>
 9        <Transformation>
10          <ogc:Function name="ras:Jiffle">
11            <ogc:Function name="parameter">
12              <ogc:Literal>coverage</ogc:Literal>
13            </ogc:Function>
14            <ogc:Function name="parameter">
15              <ogc:Literal>script</ogc:Literal>
16              <ogc:Literal>
17                nir = src[7];
18                vir = src[3];
19                dest = (nir - vir) / (nir + vir);
20              </ogc:Literal>
21            </ogc:Function>
22          </ogc:Function>
23        </Transformation>
24        <Rule>
25          <RasterSymbolizer>
26            <Opacity>1.0</Opacity>
27            <ColorMap>
28              <ColorMapEntry color="#000000" quantity="-1"/>
29              <ColorMapEntry color="#0000ff" quantity="-0.75"/>
30              <ColorMapEntry color="#ff00ff" quantity="-0.25"/>
31              <ColorMapEntry color="#ff0000" quantity="0"/>
32              <ColorMapEntry color="#ffff00" quantity="0.5"/>
33              <ColorMapEntry color="#00ff00" quantity="1"/>
34            </ColorMap>
35          </RasterSymbolizer>
36        </Rule>
37      </FeatureTypeStyle>
38    </UserStyle>
39  </NamedLayer>
40</StyledLayerDescriptor>

以下是使用可见色带的区域视图:

../../../_images/s2-visible.png

然后显示用上述样式计算的ndvi索引:

../../../_images/s2-ndvi.png

小组候选人选拔

vec:GroupCandidateSelection 是一个 Vector-to-Vector 渲染转换,根据选择的聚合操作(最小值或最大值)以及通过属性名定义的组过滤FeatureCollection。给定一个要素集合,根据定义的分组属性分组,并返回具有所选属性最小值或最大值的要素。将为每个组选择一个功能。以下SLD调用转换:

 <?xml version="1.0" encoding="UTF-8"?>
     <sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" xmlns="http://www.opengis.net/sld" xmlns:st="http://www.stations.org/1.0" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0.0">
      <sld:UserLayer>
      <sld:UserStyle>
          <sld:Name>Default Styler</sld:Name>
          <sld:Title>Default Styler</sld:Title>
          <sld:FeatureTypeStyle>
              <Transformation>
                  <ogc:Function name="vec:GroupCandidateSelection">
                      <ogc:Function name="parameter">
                          <ogc:Literal>data</ogc:Literal>
                      </ogc:Function>
                      <ogc:Function name="parameter">
                          <ogc:Literal>operationAttribute</ogc:Literal>
                          <ogc:Literal>st:numericAttribute</ogc:Literal>
                      </ogc:Function>
                      <ogc:Function name="parameter">
                          <ogc:Literal>aggregation</ogc:Literal>
                          <ogc:Literal>MIN</ogc:Literal>
                      </ogc:Function>
                      <ogc:Function name="parameter">
                          <ogc:Literal>groupingAttributes</ogc:Literal>
                          <ogc:Literal>st:inferredAttribute</ogc:Literal>
                          <ogc:Literal>st:inferredAttribute2</ogc:Literal>
                      </ogc:Function>
                  </ogc:Function>
              </Transformation>
              <sld:rule>
                  <sld:Title>Stations Selected Candidate</sld:Title>
                  <sld:PointSymbolizer>
                      <Stroke>
                          <CssParameter name="stroke">#000000</CssParameter>
                      </Stroke>
                  </sld:PointSymbolizer>
              </sld:rule>
          </sld:FeatureTypeStyle>
      </sld:UserStyle>
   </sld:UserLayer>
</sld:StyledLayerDescriptor>

哪里 st:numericAttributest:inferredAttributest:inferredAttribute2 是正在渲染的当前图层的属性,在本例中是基于复杂要素的图层,其属性用于在 http://www.stations.org/1.0 命名空间。

此矢量过程接受四个参数:

  • data :执行计算的数据。

  • aggregation :筛选数据所需的操作类型(最小或最大)。

  • operationAttribute :属性的xpath,其值将用于执行MIN或MAX操作。

  • groupingAttributes :指向定义为其执行过滤过程的功能组的属性的XPath列表。

禁用GetFeatureInfo请求结果转换

默认情况下,GetFeatureInfo结果是在对层数据进行渲染转换求值后根据输出确定的。此行为只能在以下情况下更改 raster 源(即,栅格到栅格和栅格到矢量的转换)。请参见部分 禁用GetFeatureInfo请求结果转换 在全局或按虚拟服务的基础上禁用此行为。可使用覆盖各个FeatureTypeStyle元素的WMS设置 transformFeatureInfo SLD供应商选项( truefalse )。

<VendorOption name="transformFeatureInfo">true</VendorOption>