1.Styled Layer Descriptorapi
標準描述了妥當的結構合使用規則。一個文檔包含了符號定義和繪製規則,那麼這個文檔就叫作Styled Layer Desciptor(SLD)樣式,它是一個text/Xml文件,擴展名爲.sld。SLD基於XML標記語言,附加的標準是一個XSD schema,XSD schema定義了SLD語法。ide
2.樣式文檔結構svg
樣式最外層部分包含以下片斷:字體
<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 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">
第一行包含xml定義,每個樣式文件的根節點都爲StyledLayerDescriptor,包含了樣式標準的版本屬性version(Geoserver可以使用1.0.0和1.1.0 SLD版本),還包含了命名空間和模型屬性。
StyledLayerDescriptor節點包含了一個NamedLayer或者UserLayer的集合,這兩個節點下面又包含了UserStyle節點集合。
UserStyle節點下包含FeatureTypeStyle或者CoverageStyle節點。它們下面都包含了rule集合元素。rule節點定義了怎樣繪製features。下面是一個簡單的樣式文件:ui
<?xml version="1.0" encoding="UTF-8"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd" 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"> <NamedLayer> <Name>capitals</Name> <UserStyle> <Name>capitals</Name> <Title>Capital cities</Title> <FeatureTypeStyle> <Rule> <Title>Capitals</Title> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>circle</WellKnownName> <Fill> <CssParameter name="fill"> <ogc:Literal>#FFFFFF</ogc:Literal> </CssParameter> </Fill> <Stroke> <CssParameter name="stroke"> <ogc:Literal>#000000</ogc:Literal> </CssParameter> <CssParameter name="stroke-width"> <ogc:Literal>2</ogc:Literal> </CssParameter> </Stroke> </Mark> <Opacity> <ogc:Literal>1.0</ogc:Literal> </Opacity> <Size> <ogc:Literal>6</ogc:Literal> </Size> </Graphic> </PointSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
UserStyle定義了一個circle符號使用白色填充,黑色邊界。WellKnownName包括:circle、square、triangle、star、cross、x。spa
使用geoserver-數據-Styles可查看配置並校驗Style文件是否合法。.net
Rule節點下課包含多個PointSymbolizer,樣式文件渲染順序是倒序的,放在後面的PointSymbolizer渲染在地圖上一層,前面的PointSymbolizer渲染在地圖的下一層,至關於z-index的順序。3d
3.實現一個點包含多個形狀(包含多個PointSymbolizer)的樣式例子code
實現一個比較複雜的點的樣式定義,顯示效果以下:orm
樣式定義以下:
<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 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"> <NamedLayer> <Name>opulatedPlacesComplex</Name> <UserStyle> <Title>Geoserver Beginners Guide: mark composed of three basic shapes</Title> <FeatureTypeStyle> <Rule> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>circle</WellKnownName> <Fill> <CssParameter name="fill">#00FF00</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">1</CssParameter> </Stroke> </Mark> <Size>16</Size> </Graphic> </PointSymbolizer> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>square</WellKnownName> <Fill> <CssParameter name="fill">#FF0000</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">1</CssParameter> </Stroke> </Mark> <Size>10</Size> </Graphic> </PointSymbolizer> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>circle</WellKnownName> <Fill> <CssParameter name="fill">#000000</CssParameter> </Fill> </Mark> <Size>5</Size> </Graphic> </PointSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
4.實現一個點包含外部資源形狀(ExternalGraphic)的樣式例子
顯示的點經過一個外部svg圖片來顯示,效果以下:
樣式定義以下:
<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 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"> <NamedLayer> <Name>PopulatedPlacesGraphic</Name> <UserStyle> <Title>Geoserver Beginners Guide: Populated Places with external graphics</Title> <FeatureTypeStyle> <Rule> <PointSymbolizer> <Graphic> <ExternalGraphic> <OnlineResource xlink:type="simple" xlink:href="town.svg"/> <Format>image/svg+xml</Format> </ExternalGraphic> <Size>20</Size> </Graphic> </PointSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
若是想組合不一樣的符號,可經過Inkscape來設置圖形樣式,地址:https://inkscape.org/en/。
5.線條樣式,大天然水渠的樣式
想象輸入去表達大天然的水渠?在地圖中,水渠常常使用虛線和遠點來表示。效果以下:
實現樣式的Xml以下所示:
<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 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"> <NamedLayer> <Name>DashingAndMarkers</Name> <UserStyle> <Title>Title>Geoserver Beginners Guide: Aqueducts with dashing and circle</Title> <FeatureTypeStyle> <Rule> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#ADD8E6</CssParameter> <CssParameter name="stroke-width">2</CssParameter> <CssParameter name="stroke-dasharray">10 10</CssParameter> </Stroke> </LineSymbolizer> <LineSymbolizer> <Stroke> <GraphicStroke> <Graphic> <Mark> <WellKnownName>circle</WellKnownName> <Stroke> <CssParameter name="stroke">#ADD8E6</CssParameter> <CssParameter name="stroke-width">1</CssParameter> </Stroke> </Mark> <Size>5</Size> </Graphic> </GraphicStroke> <CssParameter name="stroke-dasharray">5 15</CssParameter> <CssParameter name="stroke-dashoffset">7.5</CssParameter> </Stroke> </LineSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
第一個LineSymbolizer畫出了虛線效果,第二個LineSymbolizer畫出了圓點的效果。
6.多邊形樣式,使用陰影填充多邊形
通常多邊形都是經過邊界和單一填充顏色來表示。但多邊形也可使用其餘圖形來做爲陰影。下圖給每一個國家使用點來填充,效果以下:
實現樣式的Xml文件內容以下:
<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 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"> <NamedLayer> <Name>CountriesHatching</Name> <UserStyle> <Title>Geoserver Beginners Guide: Countries with hatching</Title> <FeatureTypeStyle> <Rule> <PolygonSymbolizer> <Fill> <GraphicFill> <Graphic> <Mark> <WellKnownName>shape://dot</WellKnownName> <Stroke> <CssParameter name="stroke">#29A6A6</CssParameter> <CssParameter name="stroke-width">3</CssParameter> </Stroke> </Mark> <Size>16</Size> </Graphic> </GraphicFill> </Fill> <Stroke> <CssParameter name="stroke">#A52A2A</CssParameter> <CssParameter name="stroke-width">2</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
多邊形的標記爲PolygonSymbolizer,使用WellKnownName爲shape://dot顯示點效果。Stroke設置了點的邊框顏色和大小。Geoserver爲咱們提供了不少標記效果。
shape://horline: 水平線。
shape://slash: 對角線向前傾斜(「/」)。
shape://backslash:對角線向後斜線(「\」)。
shape://dot: 一個小的圓圈,圓圈之間有空隙。
shape://plus: 一個加號,加號以前沒有空隙。
shape://times:一個「X」符號,沒有空隙。
shape://oarrow:一個向外的箭頭。
shape://carrow:一個向內 箭頭。
7.在點上顯示文字
在顯示每一個國家的首都時,通常都會在中心座標顯示首都名字,可經過字體標記來顯示字體。效果以下:
實現樣式的xml文件以下:
<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 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"> <NamedLayer> <Name>PopulatedPlacesLabeled</Name> <UserStyle> <Title>Geoserver Beginners Guide: Populated Places with styled labels</Title> <FeatureTypeStyle> <Rule> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>circle</WellKnownName> <Fill> <CssParameter name="fill">#FF0000</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">1</CssParameter> </Stroke> </Mark> <Size>8</Size> </Graphic> </PointSymbolizer> <TextSymbolizer> <Label> <ogc:PropertyName>NAME</ogc:PropertyName> </Label> <Font> <CssParameter name="font-family">Arial</CssParameter> <CssParameter name="font-size">12</CssParameter> <CssParameter name="font-style">normal</CssParameter> <CssParameter name="font-weight">italyc</CssParameter> </Font> <LabelPlacement> <PointPlacement> <AnchorPoint> <AnchorPointX>0</AnchorPointX> <AnchorPointY>0</AnchorPointY> </AnchorPoint> <Displacement> <DisplacementX>2</DisplacementX> <DisplacementY>5</DisplacementY> </Displacement> </PointPlacement> </LabelPlacement> <Fill> <CssParameter name="fill">#000000</CssParameter> </Fill> </TextSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
8.在連線上顯示文字
通常某一段線路都會對應有名稱,顯示效果以下:
實現樣式的xml文件以下:
<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 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"> <NamedLayer> <Name>RoadsLabeled</Name> <UserStyle> <Title>Title>Geoserver Beginners Guide: Roads with labels along the line</Title> <FeatureTypeStyle> <Rule> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">4</CssParameter> </Stroke> </LineSymbolizer> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#FF0000</CssParameter> <CssParameter name="stroke-width">2</CssParameter> </Stroke> </LineSymbolizer> <TextSymbolizer> <Label> <ogc:PropertyName>continent</ogc:PropertyName> </Label> <LabelPlacement> <LinePlacement> <PerpendicularOffset>10</PerpendicularOffset> </LinePlacement> </LabelPlacement> <Fill> <CssParameter name="fill">#000000</CssParameter> </Fill> <VendorOption name="followLine">true</VendorOption> <VendorOption name="maxAngleDelta">90</VendorOption> <VendorOption name="maxDisplacement">400</VendorOption> <VendorOption name="repeat">300</VendorOption> </TextSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
VendorOption設置一些文字的渲染參數,repeat表示道路顯示文字的間隔距離,followLine設置文字是否顏色線路方向顯示。
9.在多邊形上顯示文字
在每一個國家的多邊形邊界中顯示名稱,效果以下:
實現效果的xml文件內容以下:
<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 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"> <NamedLayer> <Name>CountriesLabeled</Name> <UserStyle> <Title>Geoserver Beginners Guide: Countries with labels</Title> <FeatureTypeStyle> <Rule> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#29A6A6</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#A52A2A</CssParameter> <CssParameter name="stroke-width">2</CssParameter> </Stroke> </PolygonSymbolizer> <TextSymbolizer> <Label> <ogc:PropertyName>name</ogc:PropertyName> </Label> <Font> <CssParameter name="font-family">Arial</CssParameter> <CssParameter name="font-size">11</CssParameter> <CssParameter name="font-style">normal</CssParameter> <CssParameter name="font-weight">bold</CssParameter> </Font> <LabelPlacement> <PointPlacement> <AnchorPoint> <AnchorPointX>0.5</AnchorPointX> <AnchorPointY>0.5</AnchorPointY> </AnchorPoint> </PointPlacement> </LabelPlacement> <Fill> <CssParameter name="fill">#000000</CssParameter> </Fill> <VendorOption name="autoWrap">50</VendorOption> <VendorOption name="maxDisplacement">150</VendorOption> <Halo> <Radius>3</Radius> <Fill> <CssParameter name="fill">#FFFFFF</CssParameter> </Fill> </Halo> </TextSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
Halo節點下設置文字的陰影效果,geoserver校驗該字段會失敗,可是能夠正常使用。