(資料科學學習手札155)基於martin為線上地圖構建字型切片服務

費弗裡發表於2023-11-21

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

1 簡介

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

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

(資料科學學習手札155)基於martin為線上地圖構建字型切片服務

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

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

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

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

(資料科學學習手札155)基於martin為線上地圖構建字型切片服務

  版本更新後來到0.11.0

(資料科學學習手札155)基於martin為線上地圖構建字型切片服務

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

/home/feffery/.cargo/bin/martin --font .
(資料科學學習手札155)基於martin為線上地圖構建字型切片服務

  就這麼簡單,我們就啟動了自定義字型切片服務,預設訪問本機的http://127.0.0.1:3000/catalog地址,即可檢視到已成功註冊的各字型切片服務資訊,其中fonts下各個鍵名,就可以作為字型名稱在地圖應用中進行配置:

(資料科學學習手札155)基於martin為線上地圖構建字型切片服務

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

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

(資料科學學習手札155)基於martin為線上地圖構建字型切片服務
(資料科學學習手札155)基於martin為線上地圖構建字型切片服務
(資料科學學習手札155)基於martin為線上地圖構建字型切片服務
(資料科學學習手札155)基於martin為線上地圖構建字型切片服務

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


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

相關文章