座標轉換

我一直以為, 只要是用到 GPS 座標, 都是使用類似這種「23.973875,120.982025」latitude,longitude 的表示方式, 頂多是時分秒轉換成十進位而已。天曉得, 我錯了! 今天向內政部不動產成交案件實際資訊資料供應系統買了資料之後, 才發現內附的座標是一個我完全沒有看過的格式, 至少它的橫坐標跟縱坐標不在一般台灣的經緯度的值上, 而是長得像這樣「248170.787,2652129.936」。

經過了一翻查證, 終於看懂這種格式叫做 TWD97, 而一般在 Google Map 輸入的那種則是叫座 WGS84。TWD97 可說是 UTM 的一種, 原本的 UTM 分為很多不同 zones, 但是台灣應該是因應需求, 而有些參數有些調整

查了 Wikipedia, 發現 UTM 的頁面有提到了簡易版的轉換公式, 雖然要把它看懂真的是對於數學能力已經退化很多的我來說非常困難 (論文1) (論文2), 但如果只是照著他的公式寫程式, 照理說應該是寫得出來的。

Google 了一下 TWD97 以及 UTM, 有一些詳細的介紹, 也有不少人寫了一些程式碼 (python UTM 套件) (Vexed’s TWD97 in PHP) (ola 的 python/java version), 但是似乎都是根據另外一篇文章 (Converting UTM to Latitude and Longitude (Or Vice Versa)) 所述的公式而成的。

於是乎, 我就在想是否能夠 implement Wikipedia 的那個版本 (in python)。所以, 東西就放上 github 啦! 兩個小 function, 也可以直接執行, 這個轉換似乎都是有點誤差的。