| 方式 | 靜態方法 | 輸入格式 | 範例 |
| WKT (Well-Known Text) | STGeomFromText | 文字 | geometry::STGeomFromText('POINT (1 2)', 0) |
| WKB (Well-Known Binary) | STGeomFromWKB | 二進位 | geometry::STGeomFromWKB(0x0101000000..., 0) |
| GML (Geography Markup Language) | GeomFromGml | XML | geometry::GeomFromGml('1,2') |
所有建構函式皆需指定 SRID (Spatial Reference ID);平面幾何預設 0,不同 SRID 物件無法直接運算(回傳 NULL)。
核心實例方法分類
屬性存取
.STGeometryType():回傳型別名稱('Point'、'LineString'...)。
.STSrid:取得/設定 SRID。
.STDimension():維度(0=Point, 1=Line, 2=Polygon)。
.STIsEmpty()、.STIsSimple()、.STIsClosed()、.STIsRing()。
幾何關係測試 (DE-9IM 模型)
.STEquals()、.STDisjoint()、.STIntersects()、.STTouches()、.STCrosses()、.STWithin()、.STContains()、.STOverlaps()、.STRelate()。
幾何運算與衍生
.STBuffer(distance):緩衝區。
.STIntersection()、.STUnion()、.STDifference()、.STSymDifference()。
.STConvexHull():凸包。
.STEnvelope():外接矩形 (MBR)。
.STBoundary():邊界幾何。
.STCentroid():幾何中心。
.STDistance(other):最短距離。
序列化輸出
.ToString() → WKT
.STAsBinary() → WKB
.AsGml() → GML
實務範例:建立多邊形並計算緩衝區交集
DECLARE @poly geometry = geometry::STGeomFromText(
'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 0);
DECLARE @point geometry = geometry::STGeomFromText('POINT(5 5)', 0);
-- 點緩衝 2 單位形成圓形區域
DECLARE @buffer geometry = @point.STBuffer(2);
-- 多邊形與緩衝區交集
DECLARE @inter geometry = @poly.STIntersection(@buffer);
SELECT @inter.STArea() AS IntersectionArea; -- 交集面積
效能與索引建議
- 空間索引需在 含幾何欄位的資料表 上建立:
CREATE SPATIAL INDEX idx_geom ON dbo.SpatialTable(GeomCol)。
- 索引使用 鑲嵌格網 分解空間,查詢前先以
.STEnvelope() 或 .Filter() 粗略篩選,再精確運算。
- SRID 一致性:資料表欄位、索引、查詢參數 SRID 必須一致,否則索引失效。
結語
掌握 Geometry 類別階層與核心方法,即可在 T-SQL 中直接完成空間查詢、幾何運算與地理圍欄邏輯,省去應用層往返運算的延遲與複雜度。
- 上一篇文章: 解決 SQL Server 不允許遠端連線的完整排查清單
- 下一篇文章: SQL Server 2008 空間資料類型入門:Geometry 平面幾何基礎與 WKT 建構
Copyright ©
程式碼之家 All Rights Reserved