iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
0
AI & Data

後端前進PostgreSQL系列 第 21

PostGIS 分析空間資料 (3) - 資料類型

儲存空間的資料類型目前據我所知的有兩種。geographygeometry

geography

以球面為依據的資料類型,採用圓球座標系統(你也知道的,地球是圓的,不對是一個類似橢圓形的地球),所有地表上的計算,都要把曲率列入考量,因此會導致此一類型所需的數學計算更加複雜,也會限制能夠配合使用的函式數量,但由於它已考慮到地表的曲線,因此計算距離時會更加準確,計算結果以公尺為單位,如果你需要處理跨越大型地區的資料時,就應該採用這種資料類型。

geometry

以平面為依據的資料類型,採用歐幾里得座標系統。此處不考慮球面曲率,因此在計算地理距離時較不精準,其計算結果單位可以由座標系統來決定。

建議

  • 範圍大 -> geography
  • 範圍小 -> geometry

PostGIS 的函式建立空間物件geographygeometry

PostGIS 有很多的空間構造的方法,可以從WKT字串(昨天學到的那個字串)或座標建構出來空間物件,並指定一個座標系統給它。先來了解座標系統常見的有哪些!

EPSG

為了方便全世界的座標系統的轉換及辨識,所以EPSG(一個國際組織單位),定義了世界各國家投影的坐標系統並有對應的編號 SRID (前幾天的文章有稍微提到),在台灣的我們常使用的編號如下

名稱 EPSG紀錄代碼SRID 說明
WGS84 4326 你所知道的經緯度座標 例如:Google Earth
Web Mercator 3857 Google Map
TWD97 中央經線121度 3826
TWD97 中央經線119度 3825
TWD67 中央經線121度 3828 台灣的舊系統
TWD67 中央經線119度 3827 台灣的舊系統

至於資料怎麼存比較好呢? 建議使用 WGS84(4326) 因為國際通用的經緯度座標系統,但還是依照自己的系統(前端的GIS系統)是用哪一種去決定。但如果拿到經緯度資料時要匯入資料庫,可能不是 WGS84(4326) ,這時座標就必須要做轉換,才能顯示於正確地理位置,目前現行政府的座標系統資料可能皆使用TWD97(3826、3825),較舊的的可能會使用 TWD67(3826、3825) ,若澎金馬適用 中央經線119度(3825、3827) 的座標系統。

接下來把座標或WKT字串,以及座標系統的SRID,一起轉成geographygeometry 資料類型吧!

嘗試用 WKT 建立 Geometry 類型資料

PostGIS 的空間建構方法 ST_GeomFromText(WKT, SRID); 格式就像左邊顯示一樣,填入對應的值以後就可以產生的Geometry資料類型。

SELECT ST_GeomFromText('POINT(120.9 22.5)', 4326);

輸出結果如下,表示這個點位的空間資料,並且有指定座標系統。

0101000020E61000009A99999999395E400000000000803640

嘗試 WKT 建立 Geography 資料類型

建立 Geography 資料類型的方法 ST_GeogFromText(text EWKT) ,EWKT 如下範例所示 'SRID=4326;LINESTRING(120.9 22.5, 121.0 22.6)'

SELECT ST_GeogFromText('SRID=4326;LINESTRING(120.9 22.5, 121.0 22.6)');

如下輸出結果,代表一個線段的空間資料,並且有指定座標系統。

0102000020E6100000020000009A99999999395E4000000000008036400000000000405E409A99999999993640

這些輸出結果,存在資料表裡就可以了!把資料表欄位設定為對應的類型GeometryGeography即可!

PostGIS 還有其他建立特定空間物件的函式,如果有空我再一一介紹。


參考資料


上一篇
PostGIS 分析空間資料 (2) - 介紹二維幾何圖形以及WKT
下一篇
PostGIS 分析空間資料 (4) - 建立欄位、GiST索引
系列文
後端前進PostgreSQL30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言