首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2008 空間資料類型:Geometry 類別階層與核心方法詳解

     編輯:關於SqlServer

承接上篇「Geometry 基礎」,本文深入解析 geometry 類別繼承體系、建構函式、靜態方法與實例方法,並以 C# 開發者熟悉的物件導向視角切入。

Geometry 類別繼承圖

Geometry 類別繼承關係圖

  • Geometry(抽象基類)
  • 具體子類:Point、LineString、Polygon
  • 集合子類:MultiPoint、MultiLineString、MultiPolygon、GeometryCollection

建構函式:三種方式實例化 Geometry

所有建構函式皆需指定 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 中直接完成空間查詢、幾何運算與地理圍欄邏輯,省去應用層往返運算的延遲與複雜度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方式靜態方法輸入格式範例
WKT (Well-Known Text)STGeomFromText文字geometry::STGeomFromText('POINT (1 2)', 0)
WKB (Well-Known Binary)STGeomFromWKB二進位geometry::STGeomFromWKB(0x0101000000..., 0)
GML (Geography Markup Language)GeomFromGmlXMLgeometry::GeomFromGml('1,2')