1.中文乱码
使用TextSymbolizer节点,可以对图层进行标注。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <?xml version="1.0" encoding="UTF-8"?> <StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:se="http://www.opengis.net/se" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1.0" xmlns:ogc="http://www.opengis.net/ogc"> <NamedLayer> <se:Name>terminal_202102061346</se:Name> <UserStyle> <se:Name>terminal_202102061346</se:Name> <se:FeatureTypeStyle> <se:Rule> <se:Name>Single symbol</se:Name> <se:TextSymbolizer> <se:Label>中国</se:Label> <se:Font> <se:SvgParameter name="font-family">宋体</se:SvgParameter> <se:SvgParameter name="font-size">13</se:SvgParameter> </se:Font> <se:LabelPlacement> <se:PointPlacement> <se:AnchorPoint> <se:AnchorPointX>0</se:AnchorPointX> <se:AnchorPointY>0.5</se:AnchorPointY> </se:AnchorPoint> </se:PointPlacement> </se:LabelPlacement> <se:Fill> <se:SvgParameter name="fill">#c6c2c2</se:SvgParameter> </se:Fill> <se:VendorOption name="maxDisplacement">1</se:VendorOption> </se:TextSymbolizer> <se:PointSymbolizer> <se:Graphic> <se:Mark> <se:WellKnownName>circle</se:WellKnownName> <se:Fill> <se:SvgParameter name="fill">#ffffff</se:SvgParameter> <se:SvgParameter name="fill-opacity">0</se:SvgParameter> </se:Fill> <se:Stroke> <se:SvgParameter name="stroke">#c6c2c2</se:SvgParameter> <se:SvgParameter name="stroke-width">1</se:SvgParameter> </se:Stroke> </se:Mark> <se:Size>12</se:Size> </se:Graphic> </se:PointSymbolizer> </se:Rule> </se:FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
|
在现实标注的时候,如果出现了中文,就可能会乱码。我尝试了以下的几种方式,都不起作用。
(1) sld文件的编码格式,即xml头部的encoding,
(2) 数据源的编码格式
(3) 使用本地的geoserver发布图层,使用同样的sld,结果都是可以生成中文标注的。
最后显示的样式为就用方框代替了。
本地部署的同样版本的geoserver显示的中文标注
(4) jvm可用字体
经过我查找资料,发现了在在菜单栏上,点击服务器状态,找到可用字体,显示可用字体列表,发现了竟然没有SimSum字体,也没有宋体和微软雅黑等,所以我猜测是因为这样才无法显示中文字体,需要先安装字体。
最后的解决方法
参考文章:
1.利用geotools生成点线面和注记的sld样式(二)
2.GeoServer style中文乱码解决方法 (主要讲了三点)
3.Geoserver SLD stylesheets - what does “se” namespace mean? (sld和se的区别)
4.1.4. IV. SLD-图层样式描述¶
5.Geoserver中文字体乱码解决方法 (这里给我提供了一个新的思路,就是查看jvm可用字体)
6.GeoServer乱码解决 (在服务器状态->可用字体这里面又可以使用的字体,还写了如何上传以及安装字体,可以尝试一下)