Geoserver中面图层Label标注重复的问题
原因分析
主窗口中是使用的 WMS整屏请求渲染,看到的是单个注记(kqwebmap 没有封装提供二次开发)。
多窗口视图,基于原生的 leaflet js api 开发,L.tileLayer.wms 用来显示地图上WMS服务,它继承自TileLayer瓦片图层,Geoserver在渲染单个瓦片时,总是试图在每个瓦片中都显示一个Label标注,看到的每个瓦片中都有一个注记。
var layer3_xzq_xj = L.tileLayer.wms(compareUrl,
{ layers: 'qxyj:xzq_xianji',
format: 'image/png',
transparent: true,
version: '1.1.1',
identify:false,
tileSize: 512,
})
解决方案
修改SLD,将标注改为以面的中心点进行标注,添加如下配置,如图所示。
<se:Geometry>
<ogc:Function name="centroid">
<ogc:PropertyName>geom</ogc:PropertyName>
</ogc:Function>
</se:Geometry>
修改好效果如下:
缺点
此方法能有效的解决标注重复问题,缺点是如果Polygon较大的情况下,会出现看不见标注的情况。因为标注只会在中心点的固定位置渲染,而不会随可视范围变化。
最好的解决办法还是是改造成整屏请求显示。