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定義了三個不同的比例尺顯示範圍:
- 8000<=altitude<160000時,顯示比例尺範圍在1:32000至1:16000之間。
- 16000<=altitude<320000時,顯示比例尺範圍在1:64000至1:32000之間。
- 32000<=altitude<640000時,顯示比例尺範圍在1:125000至1:64000之間。
注意PropertyIsGreaterThan和PropertyIsLessThan是純大於小於,不包含等於,所以等於要另外設置PropertyIsEqualTo