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

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