SQL Server 查詢座標是否在特定地理範圍內

January 25, 2026

在 SQL Server 裡面,可以查詢座標是否在特定的地理範圍內,請看後方的介紹。

基礎知識

  • WKB (well-known binary):二進位儲存地理資訊,SQL Server 的 Geography 類型欄位裡存放的格式。
  • WKT (well-known text):以文字表示地理資訊,例如 POINT (121.5 25.0) 。

語法

DECLARE @g AS geography = geography::STGeomFromText('POINT(121.012345 25.541230)',4326).MakeValid(); -- 將 WKT 的座標轉為 WKB 格式,並用 MakeValid 確保座標合理
SELECT * -- 形狀相關資料欄位
FROM xxx -- 儲存形狀的資料表
WHERE [Shape].STIntersects(@g)=1 -- 是否落在 Shape 欄位的形狀內

參考資料

解決錯誤

發生以下的錯誤時,有兩個可能的原因:

錯誤訊息如下:
Msg 6522, Level 16, State 1, Line 2 
執行使用者自訂常式或彙總 "geography" 時,發生 .NET Framework 錯誤: System.ArgumentException: 24144: 無法完成這項作業,因為例項無效。請使用 MakeValid 將例項轉換成有效的例項。注意,MakeValid 可能導致幾何例項的點稍微偏移。System.ArgumentException:。
  1. 查詢的 POINT 資料不正確,或沒有用 MakeValid 方法轉換。
  2. 查詢的形狀資料有錯誤。可以修正查詢條件:
DECLARE @g AS geography = geography::STGeomFromText('POINT(121.012345 25.541230)',4326).MakeValid(); 
SELECT * 
FROM xxx 
WHERE Shape.STIsValid() = 1 -- 資料必須也是合理的形狀
  AND [Shape].STIntersects(@g)=1 

參考資料