[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
還沒發現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
留言
張貼留言