咱們在ArcMap中能夠直接經過symbol功能對圖層進行定製化配圖。可是,若是咱們將配好圖的shp圖層在GeoServer中發佈時,會發現圖層樣式徹底丟失了。其實緣由很簡單,用ArcMap配好的圖層,其樣式文件並非保存在shp中,而是保存在mxd或者msd中。服務器
那麼如何才能讓GeoServer發佈的圖層也能達到定製化配圖的效果呢?架構
SLD是風格化圖層描述器(Styled Layer Descriptor)的簡稱,是2005年OGC提出的一個標準,這個標準在必定條件下容許WMS服務器對地圖可視化的表現形式進行擴展。在沒有SLD以前,只能使用一些已經在服務器上規定好的樣式來對地圖進行可視化。而當使用了實現了SLD標準以後,它容許咱們從客戶端來對地圖進行定義本身的樣式,分級顯示等操做,極大的擴展了地圖可視化的靈活性。字體
該SLD-規範是採用XML定義地圖顯示樣式,經過自定義SLD來配置地圖圖層渲染的可視化風格,能夠設置過濾器,自定義圖例等。rule是SLD最重要的一個元素,由於她容許根據給定的某個參數(使用過濾器)對數據集進行分類,全部的與分類有關的重要參數都必須在rule元素中設置。編碼
對於使用SLD來進行地圖的自定義樣式,則必須結合使用SE(Symbology Encoding)這個標準。SE是OGC的另外一個標準,這個也是基於XML模式定義的,這個標準容許咱們自定義不一樣的符號樣式來表達地圖上不一樣的要素。SLD文件使用這種語言,這樣在地圖渲染時地圖服務能夠解釋由用戶定義的樣式。spa
SLD文檔的元素架構以下:3d
一個SLD樣式文檔通常包含一個部分,而最重要的以下:orm
FeatureTypeStyle:這一部分是整個樣式文檔的根節點,並說明什麼是它的樣式將被應用的特徵類型。FeatureTypeStyle包含一個或者多個Rule元素,Rule元素容許有條件的映射。xml
RULE(規則):規則是根據屬性條件和地圖比例尺來對要素進行分組渲染,通常RULE中只容許渲染一種類型的要素,即點,線,面等其中的一種,可是能夠和註記同時使用。blog
Symbolizer(符號):Symbolizer指定數據應該如何可視化,在1.0的標準中包含五忠類型的Symbolizer,分別是PointSymbolizer(點符號)、LineSymbolizer(線符號)、PloygonSymbolizer(面符號)、TextSymbolizer(註記)、RasterSymbolizer(柵格)。圖片
經過SLD能夠設置的不只僅是簡單的顏色和厚度。點能夠設置成經常使用的形狀,如圓形,方形,星形,甚至能夠是自定義的圖片圖形或文字來指定;線能夠渲染成虛線或者點虛線等,多邊形能夠填充自定義的平鋪圖像,樣式能夠基於數據的屬性給定,以致於要素可以
被渲染成不一樣的風格。
經常使用參數說明:
符號 |
含義 |
<Name> |
樣式名稱 |
<FeatureTypeStyle> |
要素樣式 |
<Rule> |
規則 |
<ogc:Filter> |
過濾器 |
<ogc:PropertyIsBetween> |
用來定義在兩個屬性值之間的過濾器 |
<ogc:PropertyIsLessThan> |
用來定義在小於某個屬性值的過濾器 |
<ogc:PropertyIsGreaterThan> |
用來定義在大於某個屬性值的過濾器 |
<ogc:PropertyName> |
屬性字段名 |
<ogc:Literal> |
屬性值 |
<PointSymbolizer> |
點標記器 |
<LineSymbolizer> |
線標記器 |
<PolygonSymbolizer> |
面標記器 |
<CssParameter name="fill"> |
填充顏色 |
<CssParameter name="font-family"> |
字體 |
<CssParameter name="font-style"> |
字體樣式 |
<CssParameter name="font-size"> |
字體大小 |
…PolygonSymbolizer |
|
……Fill |
填充 |
………CssParameter name="fill" |
顏色 |
………CssParameter name="fill-opacity" |
透明度 |
……Stroke |
邊界 |
………CssParameter name="stroke" |
顏色 |
………CssParameter name="stroke-width" |
寬度 |
帶有邊界透明的多邊形
SLD:
<FeatureTypeStyle> |
效果:
…PolygonSymbolizer |
|
……Fill |
|
………GraphicFill |
|
…………Graphic |
|
……………ExternalGraphic |
|
………………OnlineResource |
圖片來源 |
………………Format |
圖片格式 |
……………Size |
大小 |
帶有使用圖片填充的多邊形
SLD:
<FeatureTypeStyle> <Fill> <GraphicFill> <Graphic> <ExternalGraphic> <OnlineResource xlink:type="simple" xlink:href="20101.gif" /> <Format>image/gif</Format> </ExternalGraphic> <Size>20</Size> </Graphic> </GraphicFill> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">1</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> |
效果:
…TextSymbolizer |
|
……Label |
|
………ogc:PropertyName |
註記的屬性字段名稱 |
……Font |
字體 |
………CssParameter name="font-family" |
字體類型 |
………CssParameter name="font-size" |
字體大小 |
………CssParameter name="font-style" |
字體樣式 |
………CssParameter name="font-weight" |
字體加粗 |
……LabelPlacement |
註記的位置 |
………PointPlacement |
註記點位置 |
…………AnchorPoint |
|
……………AnchorPointX |
|
……………AnchorPointY |
|
…………Displacement |
|
……………Displacement X |
|
……………Displacement Y |
|
…………Rotation |
設置旋轉角度 |
……Fill |
填充 |
………CssParameter name="fill" |
填充顏色 |
帶有註記的填充色透明的多邊形
SLD:
<TextSymbolizer>
|
效果:
…PolygonSymbolizer |
|
……Rule |
|
………Filter |
|
………PolygonSymbolizer |
|
………TextSymbolizer |
|
根據屬性字段值範圍用不一樣顏色渲染。
SLD:
<FeatureTypeStyle> <Rule> <Name>SmallCOMM</Name> <Title>Less Than 510104024008</Title> <ogc:Filter> <ogc:PropertyIsLessThan> <ogc:PropertyName>COMID</ogc:PropertyName> <ogc:Literal>510104024008</ogc:Literal> </ogc:PropertyIsLessThan> </ogc:Filter> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#66FF66</CssParameter> </Fill> </PolygonSymbolizer> </Rule> <Rule> <Name>MediumCOMM</Name> <Title>510104024008 to 510104024011</Title> <ogc:Filter> <ogc:And> <ogc:PropertyIsGreaterThanOrEqualTo> <ogc:PropertyName>COMID</ogc:PropertyName> <ogc:Literal>510104024008</ogc:Literal> </ogc:PropertyIsGreaterThanOrEqualTo> <ogc:PropertyIsLessThan> <ogc:PropertyName>COMID</ogc:PropertyName> <ogc:Literal>510104024011</ogc:Literal> </ogc:PropertyIsLessThan> </ogc:And> </ogc:Filter> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#33CC33</CssParameter> </Fill> </PolygonSymbolizer> </Rule> <Rule> <Name>LargeCOMM</Name> <Title>Greater Than 510104024011</Title> <ogc:Filter> <ogc:PropertyIsGreaterThan> <ogc:PropertyName>COMID</ogc:PropertyName> <ogc:Literal>510104024011</ogc:Literal> </ogc:PropertyIsGreaterThan> </ogc:Filter> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#009900</CssParameter> </Fill> </PolygonSymbolizer> </Rule> </FeatureTypeStyle> |
效果:
在SLD中還根據3.3的註記寫法,增長了註記的顯示。
…PolygonSymbolizer |
|
……Rule |
|
………MinScaleDenominator |
|
………MaxScaleDenominator |
|
………PolygonSymbolizer |
|
………TextSymbolizer |
|
經過設置不一樣比例尺時的顯示顏色,展現不一樣的效果。
SLD:
<FeatureTypeStyle> <Rule> <Name>Large</Name> <MaxScaleDenominator>5746</MaxScaleDenominator> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#CCCCCC</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">7</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> <Rule> <Name>Medium</Name> <MinScaleDenominator>5746</MinScaleDenominator> <MaxScaleDenominator>12000</MaxScaleDenominator> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#0000CC</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">4</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> <Rule> <Name>Small</Name> <MinScaleDenominator>12000</MinScaleDenominator> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#0000CC</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">1</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> </FeatureTypeStyle> |
效果圖:
初始時,某個要素的註記沒法顯示:
放大後其又能夠出現:
出現這種狀況,每每是由於註記顯示的地方在另一個要素下面。
解決方法比較簡單,利用LabelPalcement元素調整註記顯示的地方即可解決。例如:
<LabelPlacement> |
出現這樣的狀況,通常是SLD中未進行正確的格式編碼賦值。
首先將編碼改爲GB2312。例如:
<?xml version="1.0" encoding="GB2312"?> |
若是發現仍是亂碼,則頗有多是目前字體不支持中文。
例如當字體是Arial時,不支持中文:
<CssParameter name="font-family">Arial</CssParameter> |
將字體改爲微軟雅黑,則註記再也不重現亂碼:
<CssParameter name="font-family">微軟雅黑</CssParameter> |