呈现转换¶
呈现转换 允许对地理服务器呈现管道中的数据集执行处理。典型的转换从输入数据计算派生或聚合的结果,从而获得各种有用的可视化效果。转换可以将数据从一种格式转换为另一种格式(即矢量到栅格或反之亦然),以提供适当的显示格式。
下表列出了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>
元素。
渲染转换的输出使用与其格式相适应的符号设置样式: PointSymbolizer , LineSymbolizer , PolygonSymbolizer 和 TextSymbolizer 对于矢量数据,以及 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栅格):
产生热量¶
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设计的原始输入数据点,以及一个基础地图层。)
使用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>
以下是使用可见色带的区域视图:
然后显示用上述样式计算的ndvi索引:
小组候选人选拔¶
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:numericAttribute
, st:inferredAttribute
和 st:inferredAttribute2
是正在渲染的当前图层的属性,在本例中是基于复杂要素的图层,其属性用于在 http://www.stations.org/1.0
命名空间。
此矢量过程接受四个参数:
data
:执行计算的数据。aggregation
:筛选数据所需的操作类型(最小或最大)。operationAttribute
:属性的xpath,其值将用于执行MIN或MAX操作。groupingAttributes
:指向定义为其执行过滤过程的功能组的属性的XPath列表。
禁用GetFeatureInfo请求结果转换¶
默认情况下,GetFeatureInfo结果是在对层数据进行渲染转换求值后根据输出确定的。此行为只能在以下情况下更改 raster 源(即,栅格到栅格和栅格到矢量的转换)。请参见部分 禁用GetFeatureInfo请求结果转换 在全局或按虚拟服务的基础上禁用此行为。可使用覆盖各个FeatureTypeStyle元素的WMS设置 transformFeatureInfo
SLD供应商选项( true
或 false
)。
<VendorOption name="transformFeatureInfo">true</VendorOption>