[T-SQL] geography 資料類型的應用筆記

因為公司產業的關係,常常會需要算二點之間的距離

還沒發現geography這個資料型別之前都是直接算二點之間的直線距離,但是心裡知道其實不對,應該要用弧形距離去算才對

SQL的geography的資料型別可以儲存單點、線、多邊形的表示方式

而且有方法直接可以算出真正的距離(以地球弧形為準)

簡直是天要救我啊


INSERT INTO [dbo].[GeoTest] ([ID], [Geo])
VALUES (1, 'POINT (121.43, 25.02)')

這裡可以注意到是用POINT後面直接帶經緯度,寫入之後系統會自動轉成geography物件


INSERT INTO [dbo].[GeoTest] ([ID], [Geo])
VALUES (2, 'LINESTRING (121.34 25.10, 120.10 24.33)')

這裡是用LINESTRING後面帶2個點,中間用逗號分隔,所以會變成一直線,寫入之後系統也會自動轉成geography物件,可以在SQL的空間結果裡看到一條線


多邊形
INSERT INTO [dbo].[GeoTest] ([ID], [Geo])
VALUES (3, 'POLYGON (121.34 25.10, 120.10 24.33, 123.11 23.12, 127.55 24.12)')

這裡是用POLYGON後面帶4個點,所以會變成一個多邊形,一樣會自動轉成geography物件,可以在空間結果裡看到一個區塊,這是可以應用到區域的劃分

假設要算二點之間的距離,可以用STDistance這個方法算出來,系統預設是公尺

以剛剛[GeoTest] 資料表為例,其中的Geo欄位是geography的資料型別

所以可以直接

SELECT Geo.STDistance('POINT (122.43, 24.02)'))  算出Geo這個欄位跟點 122.34, 24.02的距離是150127.0711 meters

留言

這個網誌中的熱門文章

R中Try and Catch的寫法

如何將DSM(NAS)變成Mail Server

使用VBA記錄股市每分鐘的交易記錄