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因避讓或其他規(guī)則設置導致不顯示,加上以下設置:(使其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
數據量大的情況下,前端渲染存在性能瓶頸。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容