渲染选择

Geoserver提供了 VendorOption 要定义特定元素是否 RuleFeatureTypeStyleSymbolizer 应应用于 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>