最近遇到個問題,有客戶反饋:在查看地圖數據時,本來顯示的點位名稱,在地圖放大時有些不顯示了,是不是數據有問題?
排查問題后發現,數據是沒問題的,可確實出現了客戶描述的情況,如下圖所示:
通常GIS
服務器會為了解決標簽重疊顯示的問題,默認使用標簽自動避讓功能,但~這樣不應該是放大地圖后顯示的標簽會越來越多嗎,怎么還更少了呢?
地圖是用geoserver
發布的,熟悉geoserver
的同學都知道,geoserver
圖層的顯示主要是用圖層樣式來控制的,包括圖層的顯示層級、標簽自動避讓等。
於是從這個思路入手,經過一番查找。。。
發現在配置geoserver styles
的時候,把partials
參數設置為true
,能夠解決這個問題
這個參數是什么意思呢,下面是官方文檔給出的解釋
大概意思是,當標簽在瓦片邊緣顯示不全時,是否繪制。
該屬性默認為false
不繪制,這樣就會出現文章開頭描述的問題,本來顯示的標簽,結果地圖放大后卻不顯示了。
把partials
參數設置為true
后,標簽可以顯示了,但是又出現了新的問題,就是在瓦片邊緣的標簽顯示不全,如下圖:
又經過一番查找。。。
注意到,發布標簽圖層時,有個Default Rendering Buffer
的參數,這個參數默認為空,試着將它設置為100
后,再重新刷新圖層,發現標簽顯示不全的問題竟然解決了。
該參數的官方解釋如下
我的理解是,默認情況下WMS
的一個瓦片只處理自己范圍內的數據,當設置緩沖后,瓦片就會向外多處理一部分,相鄰的瓦片會有重疊,這樣就能相互照應,避免缺失標簽。
如下圖所示,當Default Rendering Buffer
設置為空時,圖中框選部分是不顯示的,原因是此標簽對應的點位不在該瓦片所包含的范圍內,當設置為合適的值后,該標簽就會顯示。
綜上,geoserver
發布的wms
標簽圖層顯示不全問題已完美解決。
這個項目是老項目維護,使用的柵格瓦片,新項目中已經開始使用矢量瓦片技術,矢量瓦片因為是在前台渲染,在標簽顯示上更靈活,效果更好,也推薦大家使用,具體使用可以參考如下思路:
- 使用
geoserver
發布矢量瓦片,這個百度一下會有很多教程。- 使用
maputnik
配圖獲取配圖樣式。注意,在使maputnik
對geoserver
配圖是會遇到問題,具體解決方式參考如何不改源碼讓maputnik支持geoserver- 使用
mapboxgl
調用geoserver
發布矢量瓦片圖層,圖層樣式采用maputnik
導出的配圖樣式。
總結
geoserver
發布的WMS
標簽圖層使用默認樣式,在瓦片邊緣的標簽會不顯示- 把樣式中的
partials
參數設置為true
,可顯示瓦片邊緣的標簽,但是會顯示不全 - 在圖層發布中,將
Default Rendering Buffer
參數設置為100
,顯示不全的標簽會顯示完整
原文地址:http://gisarmory.xyz/blog/index.html?blog=GeoServerStyleLabel
關注《GIS兵器庫》, 第一時間獲得更多高質量GIS文章。
本文章采用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名《GIS兵器庫》(包含鏈接: http://gisarmory.xyz/blog/),不得用於商業目的,基於本文修改后的作品務必以相同的許可發布。