Geoserver自定义图层样式二

标签: 无 分类: 未分类 创建时间:2021-02-07 06:29:33 更新时间:2025-01-20 09:45:24

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字体,也没有宋体和微软雅黑等,所以我猜测是因为这样才无法显示中文字体,需要先安装字体。

最后的解决方法

  • 下载SimSun.ttf字体文件

  • 新建chinese目录

    1
    2
    3
    4
    ## 新建目录
    mkdir /usr/share/fonts/chinese
    ## 新建字体命令
    sudo mkfontdir /usr/share/fonts/chinese
  • 将下载好的字体上传到服务器/usr/share/fonts/chinese目录

  • 进入chinese目录,执行字体加载命令

    1
    2
    3
    4
    5
    6
    7
    ## 这一步有错可以忽略
    sudo mkfontscale
    ## 没有命令的话安装:yum install fontconfig
    ## 没有命令的话安装:yum install mkfontscale
    sudo fc-cache
    ## 查看安装的字体
    sudo fc-list
  • 重启geoserver,新建字体之后,记得要重写启动geoserver,否则字体无法加载

参考文章:
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乱码解决 (在服务器状态->可用字体这里面又可以使用的字体,还写了如何上传以及安装字体,可以尝试一下)
文章目录
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。