現有一個shp格式的道路注記文件,用點來表示注記的位置,屬性表中保存每個點對應的字,在QGIS中打開如下圖所示
它的屬性表如下
現需要把道路數據和它的注記發布為WMS服務,通過GeoServer直接發布服務的話會顯示默認的樣式,這個版本中(2.6.2)默認情況下點用紅色的方塊表示,無法表示注記信息。因此需要使用樣式化圖層描述符(sld)來設置樣式,本質就是個XML文件。
首先可以從這里http://docs.geoserver.org/stable/en/user/styling/sld/cookbook/points.html#point-with-styled-label下載一個sld文件的模板,在此基礎上修改。注意不要在瀏覽器窗口中復制,要不然會漏了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>Point with styled label</Name> <UserStyle> <Title>GeoServer SLD Cook Book: Point with styled label</Title> <FeatureTypeStyle> <Rule> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>circle</WellKnownName> <Fill> <CssParameter name="fill">#FF0000</CssParameter> </Fill> </Mark> <Size>6</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">bold</CssParameter> </Font> <LabelPlacement> <PointPlacement> <AnchorPoint> <AnchorPointX>0.5</AnchorPointX> <AnchorPointY>0.0</AnchorPointY> </AnchorPoint> <Displacement> <DisplacementX>0</DisplacementX> <DisplacementY>5</DisplacementY> </Displacement> </PointPlacement> </LabelPlacement> <Fill> <CssParameter name="fill">#000000</CssParameter> </Fill> </TextSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
代碼的含義很容易理解,都是字面意思。PropertyName標簽要改成對應的屬性字段名字,對照第二個圖這里是TEXTSTRING,大小寫也要一致。加注記的話就不需要PointSymbolizer了,可以把size改為0,或者把透明度改為0,加一個css參數,name是opacity.字體這里要注意,使用英文字體的話如果注記是漢字會出現亂碼,這里改為宋體。另外在GeoServer中新建Stores的時候也要把編碼方式設置成g2312,GeoServer中的geotools插件對中文的支持不是很好,很容易出現亂碼問題。最重要的地方是PointPlacement標簽,它決定了注記相對於點的位置,AnchorPoint標簽設置注記和點的交點,X為0.5意味着點在標簽的水平方向的中部,Y為0意味着點和標簽的底部在垂直方向上是對齊的。Displacement標簽就相當於offset偏移量,這里水平方向上偏移0像素,垂直方向偏移5個像素。因此設置注記的話改成0.5 0.5 0 0就比較合適。除了手動修改上面的代碼外也可以用QGIS、uDig等開源GIS軟件自定義好樣式后再導出。
接下來在GeoServer里添加這個自定義的樣式,點左邊“數據”中的“styles”,然后添加新的樣式,如下圖
先選擇文件,再upload,工作區不選也行,這樣可以用到所用的工作區。最后提交。找到已經發布的圖層,點開找到“發布”那一欄,把默認的樣式改成剛才定義的那個就好了。
然后去layer preview那里預覽一下就可以看到效果。這里是自己調用Openlayers寫的程序,把底下的道路網也加載進來,好看看效果怎么樣
更多細節可以去下載sld的那個鏈接里查看,里面有詳細的cookbook
轉載請注明作者和出處。xiaoyi14,http://www.cnblogs.com/xiaoyi14/p/roadannotation.html