本文示例代碼已上傳至我的
Github
倉庫https://github.com/CNFeffery/DataScienceStudyNotes
1 簡介
大家好我是費老師,在之前的一篇文章(基於martin的高性能矢量切片地圖服務構建)中我爲大家介紹過martin
的安裝與使用,它是由maplibre
開源維護的新一代高性能地圖服務框架,底層基於rust
,使得其可以以遠勝於geoserver
等傳統地圖服務框架的效率,進行矢量切片地圖服務的發佈。
而martin
除了構建矢量切片地圖服務的核心功能外,還兼具了其他地圖服務常用功能。今天的文章中,我就將爲大家介紹如何使用martin
快捷構建自定義字體切片服務。
2 利用martin構建自定義字體切片服務
maplibre
、mapbox
等框架在構建在線地圖應用時,如果需要在地圖中使用自定義字體,由於字體文件尤其是中文等字體體積較大,出於應用資源加載速度優化的考慮,不會接受完整的字體文件,而是需要自行將原始的字體文件轉換爲pbf
切片的形式,並構建相應的web服務,供地圖應用自動按需訪問使用相應切片資源,這一套過程在過去,實現起來還是比較繁瑣。
而martin
從0.10.0
版本開始提供快捷的字體切片服務功能,使得我們只需要一行命令即可搞定上述的所有過程😎。
首先我們執行cargo install martin --force
對martin
進行覆蓋更新,譬如我之前的martin
版本爲0.8.7
:
版本更新後來到0.11.0
:
接着我們只需要在本地準備好otf
、ttf
或ttc
等常見格式的字體文件,接着執行利用martin
命令的--font
參數進行字體源的定義,可以接受單個字體文件,也可以接受路徑用於批量識別路徑下所有字體文件,還可以通過多個--font
參數分別定義若干字體源規則,下面的示例中我們以識別目標路徑下所有字體文件爲例:
/home/feffery/.cargo/bin/martin --font .
就這麼簡單,我們就啓動了自定義字體切片服務,默認訪問本機的http://127.0.0.1:3000/catalog
地址,即可查看到已成功註冊的各字體切片服務信息,其中fonts
下各個鍵名,就可以作爲字體名稱在地圖應用中進行配置:
以maplibre
爲例,按照我們示例服務的地址,爲地圖應用設置glyphs
爲http://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
。
以上就是本文的全部內容,歡迎在評論區與我進行討論~