美文网首页GISGeomatics(GIS,GPS,RS,Surveying)GIS相关
Geoserver中Polygon图层Label标注重复的问题小

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

作者: 老羽 | 来源:发表于2017-11-04 16:14 被阅读287次

概述

在实际项目中,客户经常纠结面状图层的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
数据量大的情况下,前端渲染存在性能瓶颈。

相关文章

网友评论

  • 四爷在此:GeoServer的解决很实用,哈哈哈。看起来最新的ol 已经自带了碰撞检测,应该跟rbush 有关系,刚看了下 ol 4.4 的源码
    老羽:@四爷在此 学习了。:+1:

本文标题:Geoserver中Polygon图层Label标注重复的问题小

本文链接:https://www.haomeiwen.com/subject/usofmxtx.html