geoserver發布的wms標簽圖層顯示不全問題


最近遇到個問題,有客戶反饋:在查看地圖數據時,本來顯示的點位名稱,在地圖放大時有些不顯示了,是不是數據有問題?

排查問題后發現,數據是沒問題的,可確實出現了客戶描述的情況,如下圖所示:

通常GIS服務器會為了解決標簽重疊顯示的問題,默認使用標簽自動避讓功能,但~這樣不應該是放大地圖后顯示的標簽會越來越多嗎,怎么還更少了呢?

地圖是用geoserver發布的,熟悉geoserver的同學都知道,geoserver圖層的顯示主要是用圖層樣式來控制的,包括圖層的顯示層級、標簽自動避讓等。

於是從這個思路入手,經過一番查找。。。

發現在配置geoserver styles的時候,把partials參數設置為true,能夠解決這個問題

這個參數是什么意思呢,下面是官方文檔給出的解釋

大概意思是,當標簽在瓦片邊緣顯示不全時,是否繪制。

該屬性默認為false不繪制,這樣就會出現文章開頭描述的問題,本來顯示的標簽,結果地圖放大后卻不顯示了。

partials參數設置為true后,標簽可以顯示了,但是又出現了新的問題,就是在瓦片邊緣的標簽顯示不全,如下圖:

又經過一番查找。。。

注意到,發布標簽圖層時,有個Default Rendering Buffer的參數,這個參數默認為空,試着將它設置為100后,再重新刷新圖層,發現標簽顯示不全的問題竟然解決了。

2021051104

該參數的官方解釋如下

我的理解是,默認情況下WMS的一個瓦片只處理自己范圍內的數據,當設置緩沖后,瓦片就會向外多處理一部分,相鄰的瓦片會有重疊,這樣就能相互照應,避免缺失標簽。

如下圖所示,當Default Rendering Buffer設置為空時,圖中框選部分是不顯示的,原因是此標簽對應的點位不在該瓦片所包含的范圍內,當設置為合適的值后,該標簽就會顯示。

綜上,geoserver發布的wms標簽圖層顯示不全問題已完美解決。

這個項目是老項目維護,使用的柵格瓦片,新項目中已經開始使用矢量瓦片技術,矢量瓦片因為是在前台渲染,在標簽顯示上更靈活,效果更好,也推薦大家使用,具體使用可以參考如下思路:

  1. 使用geoserver發布矢量瓦片,這個百度一下會有很多教程。
  2. 使用maputnik配圖獲取配圖樣式。注意,在使maputnikgeoserver配圖是會遇到問題,具體解決方式參考如何不改源碼讓maputnik支持geoserver
  3. 使用mapboxgl調用geoserver發布矢量瓦片圖層,圖層樣式采用maputnik導出的配圖樣式。

總結

  1. geoserver發布的WMS標簽圖層使用默認樣式,在瓦片邊緣的標簽會不顯示
  2. 把樣式中的partials參數設置為true,可顯示瓦片邊緣的標簽,但是會顯示不全
  3. 在圖層發布中,將Default Rendering Buffer參數設置為100,顯示不全的標簽會顯示完整

原文地址:http://gisarmory.xyz/blog/index.html?blog=GeoServerStyleLabel

關注《GIS兵器庫》, 第一時間獲得更多高質量GIS文章。

本文章采用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名《GIS兵器庫》(包含鏈接:  http://gisarmory.xyz/blog/),不得用於商業目的,基於本文修改后的作品務必以相同的許可發布。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM