Featured image of post 使用 MongoDB 轉換座標格式

使用 MongoDB 轉換座標格式

政府資料開放平臺的資料很多都是 shp 檔案而不提供 json 檔案。要把 json 資料匯入 MongoDB ,寫一個 javascript 檔讓 mongo shell 執行,就可以操作資料庫,直接轉換座標資料!

TWD97(二度分帶投影坐標) convert to WGS84(度分秒) with MongoDB

政府資料開放平臺的資料很多都是 shp 檔案而不提供 json 檔案。(這次的練習之前根本沒聽過 shp 格式)。在此記錄研究了一天之後的成果跟心得。

要把 json 資料匯入 MongoDB ,寫一個 javascript 檔讓 mongo shell 執行,就可以操作資料庫,直接轉換座標資料!

流程:

shp 檔案 -> json 檔案 -> import to MongoDB database -> 寫一個 javascript 檔,讓 mongo shell 直接操作資料庫轉換、更新資料。

政府資料開放平臺原始資料:臺鐵車站(共266個)shp 檔案

shp 檔案 -> json 檔案

  • shp to Json https://mygeodata.cloud/converter/shp-to-json
  • 把解壓縮之後的 .shp / .dbf / .prj /.shx 都上傳到上述網站, 選擇輸出 GeoJSON 。得到一個 geojson 檔案。副檔名 .geojson 改成 json,用 IDE 編輯器開啓。最前面有類似 Header 的多餘資料,不需要 import 進資料庫,把它去除。

在 IDE 下顯示的 json 檔

json 檔案 -> import to MongoDB database

mongoimport -d mydb -c mycollection — jsonArray < your/path/data.json

用 MongoDB Compass 看一下資料狀況。

座標數值一看就很怪,網路上做一下功課,原來這種座標是 TWD97 格式(二度分帶投影坐標),要轉換成 WGS84(度分秒)。

import to MongoDB database -> 寫一個 javascript 檔,讓 mongo shell 直接操作資料庫轉換、更新資料。

  • mongo shell 可以直接執行 javascript 檔案,mongoDB 操作語法原生就是 javascript,寫起來很親切。

這個 javascript 檔 主要做兩件事:

  • 轉換:讀取 database 的 TWD97 座標 然後轉換成 WGS84 座標

  • 更新:然後把 WGS84 座標丟回 database,更新coordinates 這個欄位

mongo theCode.js

mongo theCode.js

一些特別要注意的重點。複習一下 MongoDB operator 重要觀念。

  • $set operator 只更新特定 filed 不會覆蓋掉其他的 ; dot notation 讓可讀性變好,多善用。
  • _id 不能只傳 string , 要用 ObjectId 包起來
  • 座標的格式(注意 Lon , Lat 經緯度順序,跟 google map 或其他常用 api 順序相反):

type: Point , coordinates: [ Lon, Lat ]

  • Mongo shell 讀懂 ES6 語法,平常怎麼寫 js 這邊也就怎麼寫不用擔心。不過 console.log 不能使用,mongo shell 使用的是 print() ; printjson() 這兩個方法。

全臺灣車站分佈圖

轉換後,用 MongoDB Compass 看一下資料狀況。

  • 當資料格式是:type: Point , coordinates: [ Lon, Lat ] 順序是 [ 經,緯 ]( WGS84)這樣形式的時候,MongoDB Compass 的 Schema 視窗下,會用地圖方式顯示每筆資料地理位置,可以用圓面積選取的方式多筆 query。在 Schema 視窗 ,拖拉出同心圓做選擇(不知能否改用矩形區域做圈選,待研究)。

圈選後的每筆資料

最後更新 Mar 22, 2022 00:25 +0800