GPX 跟 GeoJSON 都是常見的地理資料格式。 這一篇解釋如何互轉這兩種檔案格式。
[2023/7]
如果只是少少兩三個檔案, 我現在都是手動上傳到
umap,
再選擇想要的格式下載回來。
等於叫 umap 幫我轉就好了。
如果需要大量轉檔, 或寫進 script 自動處理, 才需要讀這篇。
請先安裝一個套件: 什麼時候會想要把 gpx 轉成 geojson? 比方說, 從
GraphHopper 所匯出的路線規畫就是一個 gpx 檔。
以下就拿中興大學到朝陽科大的路線規畫
gh-cyut-nchu.gpx 來實驗。
注意: 當初從 GraphHopper下載 gpx 時, route、 track、 waypoints
三項資訊都要勾選。 其中 waypoints 包含起點、終點、中間手動設定的中繼點;
而 route 則包含 GraphHopper 所產生的左右轉指示點。
(實際上已經先經過前置處理:
首先這樣嘗試: 但這會出現一個錯誤訊息:
我胡亂試了好久才發現: 原來 layer 的名稱並非 xml 的標籤。 應該先用
所產生出來的 gh-cyut-nchu-TRACKS.json 跟 gh-cyut-nchu-RPTS.json
這兩個 geojson 檔就可以分別上傳到 umap 或 mapbbcode 上面去了。
至於如何把圖徵修漂亮實用一點, 另文再談。
[2022/6/5] 反過來, 如果你手中有 geojson 格式的圖資,
也可以用 ogr2ogr 把它轉成 gpx 格式。
例如從 ptx 公共運輸資訊撈出來的 json 格式 台中市 151 公車停靠站,
用 zq
轉出來的 geojson 格式,
如果想要進一步把它
匯入 osmand 成為我的最愛, 就必須轉成 gpx 格式:
apt-get install gdal-bin
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。
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
ogr2ogr -f gpx tcbus-151.gpx tcbus-151.geojson
原先的 geojson 檔當中, 凡是有 gpx 格式不認得的欄位
(例如 "description") 都會被丟棄。 如果想要保存這些欄位, 可以這樣下:
ogr2ogr -f gpx -dsco GPX_USE_EXTENSIONS=YES tcbus-151.gpx tcbus-151.geojson
。
從 官網文件 看來的。
沒有留言:
張貼留言
因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。