PostGIS: 踩坑TWD67座標錯誤

前言 最近因為工作需求碰到地理空間搜尋與儲存的技術,其中包含 PostGIS 這個 PostgreSQL 實作的地理物件函式庫,裏頭涵蓋各地區座標系統的 SRID(Spatial Reference Identifier),令人欣慰的是台灣地區常用的 TWD97 與 TWD67 兩種座標系統也涵蓋如此,但在實作過程發現 TWD67 的座標點位有高達數百公尺的誤差,追溯源頭後意外發現,原來是 PostGIS 內的參數設定有誤,解決之後就順手紀錄一下踩坑的過程。 座標參考系格式 - WKT vs proj.4 vs SRID 開始以前要先提一下地理知識,因為地球是圓的不是平的,所以要將一個橢圓形的物件投影到紙面上勢必會有投影扭曲的問題,而為了降低投影扭曲的影響,學術上有很多轉換方式,包含等面積投影、等角投影(麥卡托投影)…,但不管選用哪一種投影都只能降低扭曲的幅度,並不存在絕對好的投影方式。 為了描述座標參考系(CRS, Coordinate Reference System),訂了幾種常用的描述格式,包含: WKT(Well-Known Text): 是一種描述點、線、多邊形、幾何形狀的文本格式,例如: POINT(121.5 22.5),相較於其他格式更 human-readable。 舉例來說,Google map 使用的坐標系 WGS84 的 WKT 格式: GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] 在 PostGIS 中被應用在 spatial_ref_sys 表內的 srtext 欄位中 proj.4: 是另一種描述投影的文本格式,例如: +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs,用幾個參數如橢圓角度、基準、長度單位…來定義投影的方式。 Proj.4 是開源社群常用的地圖投影資料庫,據我所知 PostGIS 和 GDAL/OGR 這些軟體都直接或間接的使用到 Proj.4 資料庫 在 PostGIS 中被應用在 spatial_ref_sys 表內的 proj4text 欄位中 SRID:...

<span title='2023-01-17 19:49:13 +0800 +0800'>January 17, 2023</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;387 words&nbsp;·&nbsp;Madi

新居落成: Hugo x Jamstack x Render

前言 兩年前曾經用 GitHub Page 的靜態網站搭建一個部落格,當時沒有想太多,只希望能快速有個部落格來寫寫文章記錄碰到的各種坑,但因為 GitHub 上的內容都是公開的(畢竟是開源的),又可以讓人隨意下載,想了一下決定重新搭建部落格,也就有了這篇文章的誕生。 部落格選擇 開始搭建部落格之前有做了一點研究,整理網路上大家對部落格的看法如下: Medium 這個大家都知道,甚至平常看到很多技術文章都是寫在 Medium 上,但好像因為付費牆的一些因素,導致滿多技術寫手紛紛出走,想了一下,我覺得想要有一個客製化的部落格,不想被綁定在某個平台上,所以果斷放棄 Medium 這個選項。 Wordpress Wordpress 我沒有用過,但一直以來都知道他聲勢浩大,尤其是在 CMS 的生態系中更是霸主,算是很成熟且市占率很高的軟體,甚至很多接案的人都會用 Wordpress 快速做出不錯的網站,但對於只是想要寫寫文章的我來說,Wordpress 還是稍嫌複雜了一點。 GitHub Page GitHub Page 是我第一次建立部落格使用的選項,這是 GitHub 推出的靜態網站代管服務,對於簡單的網站如: 履歷、介紹…等等算是不錯的選擇。而且 Github Page 不需要租 server 和買 domain name,碰不太到環境建置,只要會用 git push 上去,就會有一個 GitHub 提供的 https://<name>.github..io 的 url,例如我之前的部落格: https://dysonma.github.io 一切看似美好,但其實 GitHub Pages 也有一些 限制: 資源空間只有 1GB 上限 每月的流量限制是 100GB 每小時只能 build 10 次 另外,有一些靜態網站產生器提供快速建立一個靜態網站,還含有很多主題可以選擇,例如: Hugo, Hexo, jekll,這些都是用 markdown 語法就可以寫文章。對我來說,主題看起來很不錯,使用上也很方便,所以納入考量。 談談 Jamstack 看了這麼多選擇後,查到這十年間的前端生態演變出一種叫 Jamstack 的名詞。...

<span title='2023-01-11 19:49:13 +0800 +0800'>January 11, 2023</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;440 words&nbsp;·&nbsp;Madi