GPX 跟 GeoJSON 都是常見的地理資料格式。
這一篇解釋如何將 GPX 轉成 GeoJSON。
請先安裝一個套件: apt-get install gdal-bin
什麼時候會想要把 gpx 轉成 geojson? 比方說, 從
GraphHopper 所匯出的路線規畫就是一個 gpx 檔。
以下就拿中興大學到朝陽科大的路線規畫
gh-cyut-nchu.gpx 來實驗。
注意: 當初從 GraphHopper下載 gpx 時, route、 track、 waypoints
三項資訊都要勾選。 其中 waypoints 包含起點、終點、中間手動設定的中繼點;
而 route 則包含 GraphHopper 所產生的左右轉指示點。
(實際上已經先經過前置處理:
opencc < GraphHopper.gpx > gh-cyut-nchu.gpx
把簡體轉成正體。)
如果把 gh-cyut-nchu.gpx 直接上傳到
umap 或 mapbbcode, 會發現圖有點醜:
出現了不該有的長距直線、 路線指示文字也不見了。
另一方面, 如果可以改上傳 geojson 檔,
則可以指定標示點的圖像及顏色等等。
首先這樣嘗試: ogr2ogr -f geojson
gh-cyut-nchu.json gh-cyut-nchu.gpx
注意! 放前面的是目的地檔; 放後面的是來源檔!
以上指定採 geojson 格式, 把 gh-cyut-nchu.gpx 轉成 gh-cyut-nchu.json。
但這會出現一個錯誤訊息:
ERROR 6: GeoJSON driver doesn't support
creating more than one layer
原來是因為 gpx 檔裡面有好幾個 layers;
但對 ogr2ogr 來說, geojson 格式永遠只能存放一個 layer 的資料。
還好 ogr2ogr 可以有第三個參數指定只從來源檔擷取一個 layer。
我胡亂試了好久才發現: 原來 layer 的名稱並非 xml 的標籤。 應該先用
ogrinfo -so -ro gh-cyut-nchu.gpx
查看來源檔, 發現它包含了五個 layers。
實驗之後發現: 我們只對其中 tracks (路徑) 跟 route_points
(帶有說明文字的左右轉指資訊) 這兩個 layers 比較有興趣, 於是這樣擷取:
ogr2ogr -f geojson gh-cyut-nchu-TRACKS.json gh-cyut-nchu.gpx tracks ogr2ogr -f geojson gh-cyut-nchu-RPTS.json gh-cyut-nchu.gpx route_points
所產生出來的 gh-cyut-nchu-TRACKS.json 跟 gh-cyut-nchu-RPTS.json 這兩個 geojson 檔就可以分別上傳到 umap 或 mapbbcode 上面去了。 至於如何把圖徵修漂亮實用一點, 另文再談。
沒有留言:
張貼留言