2015年1月11日 星期日

OSM vector map - mapsforge

本文介紹 mapsforge 的 map 格式、製作、應用及相關概念。

OSM vector map

在 Android 上 OSM 的 vector map 主要有三個選擇
OSMAnd 雖然 open source 但它的 license 在 GPLv3 之上另外加了限制
Publishing applications using the OsmAnd GPLv3 code to Google Play, Amazon Market or Apple Store should be done with written permission
所以在 app 世界沒有其他人用。

maps.me (以前叫 MapsWithMe)的公司在被併購之後 app 變免費,還宣稱會在 2015 年 open source (公告)。

而 mapsforge 不是 app,它是一個 map engine library (LGPL),所以幾乎其他支援 vector map 的 app 其實都是用它,像是 OruxMapsLocusMap 等等

另外,garmin gps 的地圖檔格式已被研究、公開,也有一些程式網站可以將 OSM data 轉為 garmin gps 用(教學)。本文不討論 garmin map。

mapsforge

OSM 的資料本來就是點、線座標及文字 tag,已經是「vector」了。只是一般 OSM 資料用的 xml 或 pbf 格式只適合儲存、批次處理,不能 random access, render map。

mapsforge 將 OSM 的資料 preprocess 預先切成一個個 tile (且以 zoom level 區分),同一個 tile 的資料連續儲存,因此 render 時就能從檔案一次把相關的資料全讀完,省下很多計算(不用考慮資料是不是太遠不用畫;在 low zoom level 的資料也已預先篩選、化簡,也不會資料量太大)。(spec)

不過 tile 裡資料要怎麼呈現、文字的擺放位置,是 render 時才根據 render theme 決定。也就是說,mapsforge 的 data model 是延續 OSM 的設計,mapsforge 並沒有區分什麼是路、房子、河流,它只知道點、線的座標還有 tag,地圖上的顏色、線條樣式都是 theme 裡頭寫的。

不少人會自己製作 map 或 theme 跟人分享,像是
map 檔跟 theme 檔是分開的,但兩者的內容要配對。有的人會兩個一起 share,但也常見使用現有的 map 檔,再依各人用途或喜好修改 theme 檔分享。譬如 tiramisu theme(介紹) 好像受到不少好評。

要測試作出來的 map 跟 theme,除了把檔案傳到 Android 用 map app 看之外,也可以用電腦上的 viewer (譬如 atlas)直接看,會比較有效率。

除了 mapsforge 的 map 格式有分版本(向前相容),mapsforge library 也有分版本,新的 library 版本除了加功能、修 bug 之外,也會支援新的 render theme feature。只是大部分 app 都沒寫他用的是哪一版的 mapsforge library。依 tiramisu theme 網站的說法,現在只有 oruxmap 6.0 及少數程式用 mapsforge library 0.4 (可以用 svg icon)。2014/12 release 的 0.5 開始支援 render theme V4。

等高線

mapsforge 原先只是設計給 OSM 地圖用,並沒有考慮到等高線。但有人就想到,如果把等高線的座標寫成 OSM 資料格式,「偽裝成一般的 OSM way」,就可以用原有的地圖製作工具作成 map 檔,再修改現有的 theme 加上等高線的定義(可能像是「細黑線,某些高度用粗黑線」),就可以有等高線地圖了。

至於等高線資料哪裡來?美國 NASA 及各國研究單位合作有免費提供全球的高程模型(Digital Elevation Data) 。DEM 的資料內容很單純,就是把全球切成譬如 90m*90m 的方格,每個方格有一個高度數值。等高線便可以透過程式計算出來。

DEM 資料集

製作 mapsforge 地圖

用到的資料及工具
  • OSM 網站可下載每週最新的 data,但全球的資料一個檔 26G。geofabrik 有提供每天最新的台灣 OSM data extract。
  • osmosis 是 OSM data 的資料處理、轉換工具,支援很多格式,還能寫 plugin。
  • mapsforge 有提供 osmosis plugin MapWriter,可以在 osmosis 讀入 OSM data 之後,輸出成 mapsforge map 檔。
  • phyghtmap 可以把 DEM 資料轉為 OSM 格式等高線。還內建下載  SRTM 跟 viewfinderpanoramas DEM 的功能。
  • 如果手邊的地形資料不是 phyghtmap 能處理的格式,可能可以用 gdal_contour 轉換。gdal 是處理 GIS 資料常用的 library/tool。
詳細的步驟有教學

若單純只有台灣 OSM data 的話,大概兩三分鐘就跑完了。若是含等高線(每 10m 一條線),全台灣一個檔(ram mode)大約要 8GB ram 執行 24 小時(估)。另有 hd mode,可以用少一點 ram,我沒試過。

若覺得全台灣的資料量太大,可以先用 osmosis 切成更小的區域。

台灣的地圖

前面提到的 OpenAndroMaps (OAM) 就可以下載台灣的地圖了。

geocaching.com.tw 的 Jing (也就是足跡遍布全台的圖客 JingGeocacher) 結合 ASTER GDEM 及 OSM data 自製 mapsforge 地圖。通常每個月會更新一次。手機 GPS 登山推廣計畫也有寫文章教學如何安裝、設定。

OAM 跟 Jing 的地圖的差異:

  • OAM 的等高線距 20m, Jing 的比較精細到 10m。
  • Jing 的地圖比較大(46mb vs 159mb)
  • Jing 有另外調過 theme,我沒跟其他 theme 比較過。
  • OAM 的歐洲以外的地圖更新頻率好像超過一個月


沒有留言 :