← Back to list

TWD97 convert to WGS84 with MongoDB

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

roro · 2018-07-04 10:24 · 12 claps · 3.7 min read
#mongodb #json #wgs84 #twd97
Open on Medium ↗

TWD97 convert to WGS84 with MongoDB

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

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

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

這個 javascript 檔 主要做兩件事:

  • 轉換:讀取 database 的 TWD97 座標 然後轉換成 WGS84 座標
  • 更新:然後把 WGS84 座標丟回 database,更新coordinates 這個欄位

shp 檔案

政府資料開放平臺原始資料:**臺鐵車站(共266個)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 檔

在 IDE 下顯示的 json 檔

json 檔案 匯入 MongoDB 資料庫

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

用 MongoDB Compass 看一下資料狀況。

座標數值一看就很怪,網路上做一下功課,原來這種座標是 TWD97 格式,要轉換成 WGS84。

座標數值一看就很怪,網路上做一下功課,原來這種座標是 TWD97 格式,要轉換成 WGS84。

mongo shell 執行 js 檔案,進行座標轉換

  • mongo shell 可以直接執行 javascript 檔案,mongoDB 操作語法原生就是 javascript,寫起來很親切。
  • 整個轉換過程中,最重要的就是轉換函數了 。感謝 Kuro 還有之前編寫此函數的大大們!
  • terminal 執行下方 javascript 程式碼

mongo theCode.js

[embed]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 看一下資料狀況。

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

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

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

圈選後的每筆資料

圈選後的每筆資料


메타데이터
post_id
e474e962bf2a
slug
twd97-convert-to-wgs84-with-mongodb-e474e962bf2a
url
https://medium.com/@wodyaln/twd97-convert-to-wgs84-with-mongodb-e474e962bf2a
canonical_url
https://medium.com/@wodyaln/twd97-convert-to-wgs84-with-mongodb-e474e962bf2a
author_url
https://medium.com/@wodyaln
status
ok
fetched_at
2026-07-30 02:25:47