如何建立 mapbox 精靈圖

GIS兵器庫發表於2021-01-14

緣起

前面文章介紹了如何在本地釋出OSM資料,並使用 maputnik 自定義 mapbox 格式的地圖樣式。在使用 maputnik 配圖時,如果想要使用自己的圖片作為地圖符號,就需要製作精靈圖。

精靈圖的製作工具有很多,線上網站就有一大堆,但普遍存在一個問題,maputnik 對精靈圖的要求是要有精靈圖和說明精靈圖中圖片資訊的json配置檔案,而這些線上網站的工具,只能生成精靈圖,沒有json配置檔案。

mapbox精靈圖工具

mapbox開源了一個精靈圖製作工具 spritezero,這個工具可以生成精靈圖和對應的json檔案。spritezero 的輸入檔案是svg檔案,輸出檔案是指定比例的精靈圖和對應的json檔案。

我自己在安裝 spritezero 這個工具時總報錯,翻看它的 issues 發現很多人都碰到了這個問題。原因是用到的一個類庫太老了,我最終解決辦法是另闢蹊徑,找了一個它的docker庫 spritezero-docker , 這個docker庫裡已經把 spritezero 的環境配置好了,直接用就行。

spritezero-docker 使用方法

下面的操作步驟是基於linux系統

  1. 克隆庫

    docker pull dolomate/spritezero
    
  2. 在當前目錄建立 ./data/sprites/_svg 資料夾

  3. 把svg檔案放在 ./data/sprites/_svg 資料夾中,svg檔案的名稱不要太隨意,名稱會被寫入json配置檔案,後續使用時會用到。

  4. 在當前目錄執行命令,生成精靈圖:

    docker run -it -e FOLDER=_svg -e THEME=sprites -v ${PWD}/data:/data dolomate/spritezero
    
  5. 生成的精靈圖會存放在 ./data/sprites 資料夾中

精靈圖黑框問題

檢視生成的精靈圖,你可能會碰上下圖中的問題:只有黑色輪廓

一通排查,發現上面問題的原因是:在svg程式碼中,style的寫法問題。style單獨寫不行,需要內嵌到dom元素中,如下圖:

解決方法,用 AI(Adobe Illustrator) 軟體匯出SVG檔案時,CSS屬性欄選擇“樣式屬性”,style就會內嵌到dom元素中了。下圖是匯出時的正確選項,更深入的可以參考這篇文章

在 maputnik 中使用生成的精靈圖

  1. 把生成的精靈圖用web伺服器釋出出來,我用的tomcat。記得解決web伺服器的跨域問題,不然呼叫時會報錯。

  2. 配置精靈圖釋出的路徑,如下圖

  1. 選擇一個symbol型別的符號,在 Image 選項的下拉框中,會直接顯示精靈圖中的圖片名稱,這個圖片名稱就是前面讓大家起名不要太隨意的SVG檔名稱。

總結:

  1. 在用 maputnik 配圖時,如果想自定義地圖符號,就要自己製作精靈圖
  2. 網上的精靈圖製作工具,普遍只能生成精靈圖,沒有json配置檔案,而 maputnik 需要json配置檔案
  3. mapbox開源了一個精靈圖製作工具 spritezero ,生成的精靈圖有json配置檔案
  4. spritezero 在安裝時會報錯,原因是用到的一個庫太老了
  5. spritezero-docker 是spritezero的docker庫,已經解決了安裝環境問題
  6. 介紹瞭如何使用 spritezero-docker 生成精靈圖
  7. 生成精靈圖時,如果出現黑框問題,多半是因為style的寫法問題。style需要內嵌到dom元素中
  8. 介紹瞭如何在 maputnik 中使用生成的精靈圖

相關連線:

  1. 如何在本地釋出OSM資料:http://gisarmory.xyz/blog/index.html?blog=OSMVectorTiles
  2. spritezero庫github地址:https://github.com/mapbox/spritezero
  3. spritezero庫安裝報錯的問題:https://github.com/mapbox/spritezero/issues/84
  4. spritezero-docker庫github地址:https://github.com/macteo/spritezero-docker
  5. 如何正確用AI匯出SVG檔案:https://cloud.tencent.com/developer/article/1007666

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

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

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

相關文章