Geoserver中Polygon图层Label标注重复的问题小结

概述

在实际项目中,客户经常纠结面状图层的Label标注重复问题,见下图:

image.png

猜测:因为项目中多用的是瓦片图层,Geoserver在渲染单个瓦片时,总是试图在每个瓦片中都显示一个Label标注。验证如下(单张瓦片的情况下并不会出现标注重复的问题):

image.png

解决思路:

1、将瓦片的大小修改更大

实际项目中单个瓦片会有性能问题,见下图,适当的将瓦片修改更大一些,可以有效的解决标注重复的问题,并且实践证明与底图的[256,256]瓦片能够套合。但是不能彻底解决,因为也有可能512像素也不能包含一个面时,标注会出现重复,不过看上去会好一些。

image.png
2、修改SLD,将标注改为以面的中心点进行标注

SLD参考如下:
image.png

利用Geoserver提供的Geometry Function实现用中心点来标注:
image.png

效果如下图:
image.png

为防止Point Label因避让或其他规则设置导致不显示,加上以下设置:(使其Label始终显示)

<VendorOption name="spaceAround">-1</VendorOption>
<VendorOption name="conflictResolution">false</VendorOption>
<VendorOption name="partials">true</VendorOption>

几个设置项的官方解释如下:

spaceAround:
image.png

conflictResolution:
image.png

最重要这个选项:partials
image.png

配合这个选项还需要设置图层的"Default Rendering Buffer",根据图标或Label的长度设置,单位像素:
image.png

如果不设置Default Rendering Buffer,可能的效果如下图:
image.png

如果不设置partials参数,这种情况下就不会显示Label!!!

缺点:
此方法能有效的解决标注重复问题,缺点是如果PolygonFeature较大的情况下,会出现看不见标注的情况。因为标注只会在中心点的固定位置渲染,而不会随可视范围变化。

image.png
3、在前端渲染标注

参考:http://openlayers.org/en/master/examples/vector-layer.html?q=text
http://openlayers.org/en/master/examples/street-labels.html?q=text
数据量大的情况下,前端渲染存在性能瓶颈。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容