GeoServer中使用样式化图层描述符(sld)加注记
Posted xiaoyi14
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GeoServer中使用样式化图层描述符(sld)加注记相关的知识,希望对你有一定的参考价值。
现有一个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
以上是关于GeoServer中使用样式化图层描述符(sld)加注记的主要内容,如果未能解决你的问题,请参考以下文章
Geoserver SLD 样式 - propertyName 中的空格
GeoServer java.io.IOException: No such resource: generic.sld No such resource: generic.sld