(數據科學學習手札155)基於martin爲在線地圖構建字體切片服務

本文示例代碼已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

1 簡介

  大家好我是費老師,在之前的一篇文章(基於martin的高性能矢量切片地圖服務構建)中我爲大家介紹過martin的安裝與使用,它是由maplibre開源維護的新一代高性能地圖服務框架,底層基於rust,使得其可以以遠勝於geoserver等傳統地圖服務框架的效率,進行矢量切片地圖服務的發佈。

  而martin除了構建矢量切片地圖服務的核心功能外,還兼具了其他地圖服務常用功能。今天的文章中,我就將爲大家介紹如何使用martin快捷構建自定義字體切片服務。

2 利用martin構建自定義字體切片服務

  maplibremapbox等框架在構建在線地圖應用時,如果需要在地圖中使用自定義字體,由於字體文件尤其是中文等字體體積較大,出於應用資源加載速度優化的考慮,不會接受完整的字體文件,而是需要自行將原始的字體文件轉換爲pbf切片的形式,並構建相應的web服務,供地圖應用自動按需訪問使用相應切片資源,這一套過程在過去,實現起來還是比較繁瑣。

  而martin0.10.0版本開始提供快捷的字體切片服務功能,使得我們只需要一行命令即可搞定上述的所有過程😎。

  首先我們執行cargo install martin --forcemartin進行覆蓋更新,譬如我之前的martin版本爲0.8.7

  版本更新後來到0.11.0

  接着我們只需要在本地準備好otfttfttc等常見格式的字體文件,接着執行利用martin命令的--font參數進行字體源的定義,可以接受單個字體文件,也可以接受路徑用於批量識別路徑下所有字體文件,還可以通過多個--font參數分別定義若干字體源規則,下面的示例中我們以識別目標路徑下所有字體文件爲例:

/home/feffery/.cargo/bin/martin --font .

  就這麼簡單,我們就啓動了自定義字體切片服務,默認訪問本機的http://127.0.0.1:3000/catalog地址,即可查看到已成功註冊的各字體切片服務信息,其中fonts下各個鍵名,就可以作爲字體名稱在地圖應用中進行配置:

  以maplibre爲例,按照我們示例服務的地址,爲地圖應用設置glyphshttp://127.0.0.1:3000/font/{fontstack}/{range}後,對於maplibre要額外爲地圖實例設置localIdeographFontFamily參數爲false,接着按照symbol型圖層參數配置要求設置好text-font等參數即可。

  下面我們純Python編寫一個非常簡單的應用(完整源碼見本文開頭倉庫),其中使用到feffery-maplibre,是由我開源維護的用於在Dash應用中實現高性能在線地圖的組件庫,其中展示了點線面各常見要素對應的文字標籤形式在不同字體下的效果:

  更多資料請參考martin官方文檔https://maplibre.org/martin/37-sources-fonts.html


  以上就是本文的全部內容,歡迎在評論區與我進行討論~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章