渲染选择¶
Geoserver提供了 VendorOption
要定义特定元素是否 Rule
, FeatureTypeStyle
或 Symbolizer
应应用于 getLegendGraphic
输出或输出到 getMap
输出。
这允许从SLD生成更好的外观和更具表现力的图例,而不需要实际呈现样式的潜在复杂性。其他系统有一种专门的语言来建立传奇。使用相同语言的优点是可以很容易地保留动态行为,如基于呈现的区域的规则删除。
供应商选项名为 inclusion
,例如:
<VendorOption name=“Include”>LegendOnly</VendorOption>
<VendorOption name=“Include”>mapOnly</VendorOption>
有效值包括:
legendOnly
将样式应用于要渲染地图的数据时,将跳过该元素。mapOnly
将样式应用于要呈现图例的数据时,将跳过该元素。normal
将具有与省略供应商选项相同的效果:SLD元素将用于地图和图例(与不指定供应商选项的效果相同)。
以以下样式为例:对于每个规则,定义了两个符号化器,一个在渲染图例时将跳过,另一个将在渲染地图并从外部SVG文件加载图例图标时跳过。
<?xml version="1.0" encoding="UTF-8"?>
<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" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
<NamedLayer>
<Name>Style example</Name>
<UserStyle>
<FeatureTypeStyle>
<Rule>
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>90</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">0xFF0000</CssParameter>
</Fill>
</Mark>
<Size>32</Size>
</Graphic>
<VendorOption name="inclusion">mapOnly</VendorOption>
</PointSymbolizer>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple" xlink:href="my-custom-legend-icon1.svg" />
<Format>image/svg+xml</Format>
</ExternalGraphic>
<Size>20</Size>
</Graphic>
<VendorOption name="inclusion">legendOnly</VendorOption>
</PointSymbolizer>
</Rule>
<Rule>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>90</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>180</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#6495ED</CssParameter>
</Fill>
</Mark>
<Size>32</Size>
</Graphic>
<VendorOption name="inclusion">mapOnly</VendorOption>
</PointSymbolizer>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple" xlink:href="my-custom-legend-icon2.svg" />
<Format>image/svg+xml</Format>
</ExternalGraphic>
<Size>20</Size>
</Graphic>
<VendorOption name="inclusion">legendOnly</VendorOption>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
通过定义每个规则两次,每次使用单个符号符,并在规则级别定义供应商选项,可以获得相同的结果。
<?xml version="1.0" encoding="UTF-8"?>
<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" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
<NamedLayer>
<Name>Style example</Name>
<UserStyle>
<FeatureTypeStyle>
<Rule>
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>90</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">0xFF0000</CssParameter>
</Fill>
</Mark>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
<VendorOption name="inclusion">mapOnly</VendorOption>
</Rule>
<Rule>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>90</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>180</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#6495ED</CssParameter>
</Fill>
</Mark>
<Size>32</Size>
</Graphic>
<VendorOption name="inclusion">mapOnly</VendorOption>
</PointSymbolizer>
</Rule>
<Rule>
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>90</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple" xlink:href="my-custom-legend-icon1.svg" />
<Format>image/svg+xml</Format>
</ExternalGraphic>
<Size>20</Size>
</Graphic>
<VendorOption name="inclusion">legendOnly</VendorOption>
</PointSymbolizer>
</Rule>
<Rule>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>90</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>180</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple" xlink:href="my-custom-legend-icon2.svg" />
<Format>image/svg+xml</Format>
</ExternalGraphic>
<Size>20</Size>
</Graphic>
<VendorOption name="inclusion">legendOnly</VendorOption>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
获得相同结果的第三种方法可能是在FeatureTypeStyle级别定义供应商选项。
<?xml version="1.0" encoding="UTF-8"?>
<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" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
<NamedLayer>
<Name>Style example</Name>
<UserStyle>
<FeatureTypeStyle>
<Rule>
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>90</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">0xFF0000</CssParameter>
</Fill>
</Mark>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>90</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>180</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#6495ED</CssParameter>
</Fill>
</Mark>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<VendorOption name="inclusion">mapOnly</VendorOption>
</FeatureTypeStyle>
<FeatureTypeStyle>
<Rule>
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>90</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple" xlink:href="my-custom-legend-icon1.svg" />
<Format>image/svg+xml</Format>
</ExternalGraphic>
<Size>20</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>90</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>numericValue</ogc:PropertyName>
<ogc:Literal>180</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple" xlink:href="my-custom-legend-icon2.svg" />
<Format>image/svg+xml</Format>
</ExternalGraphic>
<Size>20</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<VendorOption name="inclusion">legendOnly</VendorOption>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>