GeoServer Style配置☞为点图层设置图标并根据属性过滤设置其多个最大最小比例尺范围等级



SLD整体介绍

简介

  SLD是一种标记语言,全称Styled Layer Descriptor,也就是图层样式描述(不好意思,翻译水平有限,看懂就行了),它是一种基于XML的标记语言,GeoServer中的样式支持SLD。

配置参考

  geoserver官网上有关于SLD配置的全套参考说明,见:https://docs.geoserver.org/stable/en/user/styling/index.html。
  强烈建议参考该官方文档,因为它非常详细,还有示例,其中列举了所有边界情况并且对我们的好多疑问都有回答。以上的简介就是这个文档中的简介,通俗易懂。
   地址往前回退一步就是所有geoserver的文档说明:https://docs.geoserver.org/stable/en/user/index.html

自动化配置工具及其局限性

主要使用udig和qgis:
udig下载地址:http://udig.refractions.net/download/
QGIS:https://qgis.org/en/site/forusers/download.html
udig有绿色版,QGIS要安装,后者比较大。

  这两个配置工具是很方便,可以傻瓜式操作并直接导出sld,局限性是有些sld支持的配置项在工具里面设置不方便,有些也不支持,比如过滤器,如果不了解sld过滤器语法的话,在配置工具里面也很难设置,因为工具里面也是一个文本框让你手动输入这些过滤器,没有支持的简易操作。所以还是看看sld官方文档手动编写xml来的直接快速。但是我们可以用它生成的sld作为参考。

为点图层设置图标

            <sld:Rule>
                    <sld:PointSymbolizer>
                       <sld:Graphic>
                         <sld:ExternalGraphic>
                            <sld:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="********.png"></sld:OnlineResource>
                                <sld:Format>image/png</sld:Format>
                         </sld:ExternalGraphic>
                         <sld:Size>20</sld:Size>
                       </sld:Graphic>
                    </sld:PointSymbolizer>
                </sld:Rule>

这里用的是OnlineResource,这样可以将图片作为网络资源引用进来。如果用udig,该工具可以生成一个图片的链接,当然文档是存在本地,你也可以将图片放在网络的什么地方,这里提供一个url即可,

根据图层其中一个属性过滤设置多个比例尺范围

用filter实现过滤,我们根据一个图层的一个属性设置过滤条件,这样生成多个rules,每个rules有个过滤条件,有最大最小可见比例尺,并将图标也定义在对应的rules中。

               <sld:Rule>
                  <ogc:Filter>
                    <ogc:Or>
                    <ogc:And>
                   <ogc:PropertyIsGreaterThan>
                      <ogc:PropertyName>altitude</ogc:PropertyName>
                      <ogc:Literal>8000</ogc:Literal>
                   </ogc:PropertyIsGreaterThan>
                   <ogc:PropertyIsLessThan>
                      <ogc:PropertyName>altitude</ogc:PropertyName>
                      <ogc:Literal>16000</ogc:Literal>
                   </ogc:PropertyIsLessThan>
                    </ogc:And>
                      <ogc:PropertyIsEqualTo>
                         <ogc:PropertyName>altitude</ogc:PropertyName>
                      <ogc:Literal>8000</ogc:Literal>
                      </ogc:PropertyIsEqualTo>
                    </ogc:Or>
                  </ogc:Filter>
                    <sld:MinScaleDenominator>16000</sld:MinScaleDenominator>
                    <sld:MaxScaleDenominator>32000</sld:MaxScaleDenominator>
                    <sld:PointSymbolizer>
                       <sld:Graphic>
                         <sld:ExternalGraphic>
                            <sld:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="*****.png"></sld:OnlineResource>
                                <sld:Format>image/png</sld:Format>
                         </sld:ExternalGraphic>
                         <sld:Size>20</sld:Size>
                       </sld:Graphic>
                    </sld:PointSymbolizer>
                </sld:Rule>
               <sld:Rule>
                  <ogc:Filter>
                    <ogc:Or>
                    <ogc:And>
                   <ogc:PropertyIsGreaterThan>
                      <ogc:PropertyName>altitude</ogc:PropertyName>
                      <ogc:Literal>16000</ogc:Literal>
                   </ogc:PropertyIsGreaterThan>
                   <ogc:PropertyIsLessThan>
                      <ogc:PropertyName>altitude</ogc:PropertyName>
                      <ogc:Literal>32000</ogc:Literal>
                   </ogc:PropertyIsLessThan>
                    </ogc:And>
                      <ogc:PropertyIsEqualTo>
                         <ogc:PropertyName>altitude</ogc:PropertyName>
                      <ogc:Literal>16000</ogc:Literal>
                      </ogc:PropertyIsEqualTo>
                    </ogc:Or>
                  </ogc:Filter>
                    <sld:MinScaleDenominator>32000</sld:MinScaleDenominator>
                    <sld:MaxScaleDenominator>64000</sld:MaxScaleDenominator>
                    <sld:PointSymbolizer>
                       <sld:Graphic>
                         <sld:ExternalGraphic>
                            <sld:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="*****.png"></sld:OnlineResource>
                                <sld:Format>image/png</sld:Format>
                         </sld:ExternalGraphic>
                         <sld:Size>20</sld:Size>
                       </sld:Graphic>
                    </sld:PointSymbolizer>
                </sld:Rule>
               <sld:Rule>
                  <ogc:Filter>
                    <ogc:Or>
                    <ogc:And>
                   <ogc:PropertyIsGreaterThan>
                      <ogc:PropertyName>altitude</ogc:PropertyName>
                      <ogc:Literal>32000</ogc:Literal>
                   </ogc:PropertyIsGreaterThan>
                   <ogc:PropertyIsLessThan>
                      <ogc:PropertyName>altitude</ogc:PropertyName>
                      <ogc:Literal>64000</ogc:Literal>
                   </ogc:PropertyIsLessThan>
                    </ogc:And>
                      <ogc:PropertyIsEqualTo>
                         <ogc:PropertyName>altitude</ogc:PropertyName>
                      <ogc:Literal>32000</ogc:Literal>
                      </ogc:PropertyIsEqualTo>
                    </ogc:Or>
                  </ogc:Filter>
                    <sld:MinScaleDenominator>64000</sld:MinScaleDenominator>
                    <sld:MaxScaleDenominator>125000</sld:MaxScaleDenominator>
                    <sld:PointSymbolizer>
                       <sld:Graphic>
                         <sld:ExternalGraphic>
                            <sld:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="*****.png"></sld:OnlineResource>
                                <sld:Format>image/png</sld:Format>
                         </sld:ExternalGraphic>
                         <sld:Size>20</sld:Size>
                       </sld:Graphic>
                    </sld:PointSymbolizer>
                </sld:Rule>

如上代码所示,我们根据属性altitude定义了三个不同的比例尺显示范围:

  1. 8000<=altitude<160000时,显示比例尺范围在1:32000至1:16000之间。
  2. 16000<=altitude<320000时,显示比例尺范围在1:64000至1:32000之间。
  3. 32000<=altitude<640000时,显示比例尺范围在1:125000至1:64000之间。

注意PropertyIsGreaterThan和PropertyIsLessThan是纯大于小于,不包含等于,所以等于要另外设置PropertyIsEqualTo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章