建立、建構和查詢 geometry 實例
適用於:sql Server Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric Microsoft Fabric SQL 資料庫中 Microsoft網状架構倉儲中的 SQL 分析端點
平面空間資料類型 (geometry) 代表 Euclidean (平面) 座標系統中的資料。 這種類型在 SQL Server 中是實作為 Common Language Runtime (CLR) 資料類型。
geometry 類型已預先定義,而且可在每一個資料庫中使用。 您可以建立 geometry 類型的資料表資料行,並使用與其他 CLR 類型相同的方式來操作 geometry 資料。
SQL Server 支援的 geometry 資料類型 (平面) 符合開放式地理空間協會 (Open Geospatial Consortium,OGC) 的 SQL 簡單特徵規格 1.1.0 版。
如需有關 OGC 規格的詳細資訊,請參閱下列主題:
SQL Server 支援以下列結構描述定義之現有 GML 3.1 標準的子集:https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd。
建立或建構新的 geometry 實例
從現有的實例建立新的 geometry 實例
geometry 資料類型提供許多內建方法,您可以使用這些方法來根據現有執行個體建立新的 geometry 執行個體。
在幾何周圍建立緩衝區
STBuffer (geometry 資料類型)
BufferWithTolerance (geometry 資料類型)
建立簡化版本的幾何
Reduce (geometry 資料類型)
建立幾何的凸面
STConvexHull (geometry 資料類型)
從兩個幾何的交集建立幾何
STIntersection (geometry 資料類型)
從兩個幾何的聯集建立幾何
STUnion (geometry 資料類型)
從兩個幾何不重疊的點建立幾何
STDifference (geometry 資料類型)
從兩個幾何不重疊的點建立幾何
STSymDifference (geometry 資料類型)
建立位於現有幾何上的任意 Point 執行個體
STPointOnSurface (geometry 資料類型)
從已知文字輸入建構幾何實例
geometry 資料類型提供數種內建方法,可從開放式地理空間協會 (Open Geospatial Consortium,OGC) 的 WKT 表示法產生幾何。 WKT 標準是一種文字字串,可允許使用文字格式交換幾何資料。
從 WKT 輸入建構任何類型的 geometry 執行個體
STGeomFromText (geometry 資料類型)
從 WKT 輸入建構幾何 Point 執行個體
STPointFromText (geometry 資料類型)
從 WKT 輸入建構幾何 MultiPoint 執行個體
STMPointFromText (geometry 資料類型)
從 WKT 輸入建構幾何 LineString 執行個體
STLineFromText (geometry 資料類型)
從 WKT 輸入建構幾何 MultiLineString 執行個體
STMLineFromText (geometry 資料類型)
從 WKT 輸入建構幾何 Polygon 執行個體
STPolyFromText (geometry 資料類型)
從 WKT 輸入建構幾何 MultiPolygon 執行個體
STMPolyFromText (geometry 資料類型)
從 WKT 輸入建構幾何 GeometryCollection 執行個體
STGeomCollFromText (geometry 資料類型)
從已知的二進位輸入建構幾何實例
WKB 是 Open Geospatial Consortium (OGC) 所指定的二進位格式,允許 在用戶端應用程式與 SQL 資料庫之間交換幾何 數據。 下列函數可接受 WKB 輸入來建構幾何:
從 WKB 輸入建構任何類型的 geometry 執行個體
STGeomFromWKB (geometry 資料類型)
從 WKB 輸入建構幾何 Point 執行個體
STPointFromWKB (geometry 資料類型)
從 WKB 輸入建構幾何 MultiPoint 執行個體
STMPointFromWKB (geometry 資料類型)
從 WKB 輸入建構幾何 LineString 執行個體
STLineFromWKB (geometry 資料類型)
從 WKB 輸入建構幾何 MultiLineString 執行個體
STMLineFromWKB (geometry 資料類型)
從 WKB 輸入建構幾何 Polygon 執行個體
STPolyFromWKB (geometry 資料類型)
從 WKB 輸入建構幾何 MultiPolygon 執行個體
STMPolyFromWKB (geometry 資料類型)
從 WKB 輸入建構幾何 GeometryCollection 執行個體
STGeomCollFromWKB (geometry 資料類型)
從 GML 文字輸入建構幾何實例
geometry 資料類型提供了一個方法從 GML 產生 geometry 執行個體,GML 是幾何物件的 XML 表示法。 SQL Server 可支援 GML 的子集。
從 GML 輸入建構任何類型的 geometry 執行個體
GeomFromGml (geometry 資料類型)
從 geometry 實例傳回已知文字和已知二進位檔
您可以使用下列方法傳回 WKT 或 WKB 格式的 geometry 執行個體:
傳回 WKT 表示法的 geometry 執行個體
STAsText (geometry 資料類型)
傳回 WKT 表示法的 geometry 執行個體 (包含任何 Z 和 M 值)
AsTextZM (geometry 資料類型)
傳回 WKB 表示法的 geometry 執行個體
STAsBinary (geometry 資料類型)
傳回 GML 表示法的 geometry 執行個體
AsGml (geometry 資料類型)
查詢 geometry 實例的屬性和行為
所有geometry 執行個體都有許多屬性,這些屬性可透過 SQL Server 提供的方法來加以擷取。 下列主題定義幾何類型的屬性和行為以及用來查詢每一個類型的方法。
有效性、實例類型和 GeometryCollection 資訊
一旦建構了 geometry 執行個體之後,您就可以使用下列方法來判斷它的格式是否正確、傳回執行個體類型,或者如果它是集合執行個體,就會傳回特定的 geometry 執行個體。
傳回 geometry 類型的執行個體
STGeometryType (geometry 資料類型)
判斷 geometry 是否為特定的執行個體類型
InstanceOf (geometry 資料類型)
判斷 geometry 執行個體對於它的執行個體類型而言是否格式正確
STIsValid (geometry 資料類型)
將 geometry 執行個體轉換成具有執行個體類型的正確格式 geometry 執行個體
MakeValid (geometry 資料類型)
傳回幾何集合執行個體中的幾何數
STNumGeometries (geometry 資料類型)
傳回幾何集合執行個體中的特定幾何
STGeometryN (geometry 資料類型) STGeometryN (geometry 資料類型)
點數
所有非空白的 geometry 執行個體都是由 「點」(point) 所組成。 這些點代表幾何繪製所在平面的 X 和 Y 座標。 geometry 提供許多內建方法來查詢執行個體的點。
傳回組成執行個體的點數
STNumPoints (geometry 資料類型)
傳回執行個體中的特定點
STPointN (geometry 資料類型)
傳回位於執行個體上的任意點
STPointOnSurface (geometry 資料類型)
傳回執行個體的起點
STStartPoint (geometry 資料類型)
傳回實例的端點
STEndpoint (geometry 資料類型)
傳回 Point 執行個體的 X 座標
STX (geometry 資料類型)
傳回 Point 執行個體的 Y 座標
STY (geometry 資料類型)
傳回 Polygon、CurvePolygon 或 MultiPolygon 執行個體的幾何中心點
STCentroid (geometry 資料類型)
尺寸
非空的 geometry 執行個體可以是 0 維度、1 維度或 2 維度。 Point和 MultiPoint 等零維 幾何沒有長度或區域。 LineString、CircularString、CompoundCurve和 MultiLineString等一維物件有長度。 Polygon、 CurvePolygon和 MultiPolygon等二維執行個體有區域和長度。 空的執行個體會報告 -1 的維度,而 GeometryCollection 則會報告與其內容類型相依的區域。
傳回執行個體的維度
STDimension (geometry 數據類型)
傳回執行個體的長度
STLength (geometry 資料類型)
傳回執行個體的區域
STArea (geometry 資料類型)
空白
「空的」geometry 執行個體沒有任何點。 空的 LineString, CircularString、 CompoundCurve和 MultiLineString 執行個體的長度是零。 空的 Polygon、 CurvePolygon和 MultiPolygon 執行個體的區域是 0。
判斷執行個體是否為空的
STIsEmpty (geometry 資料類型) 。
簡單
如果要讓執行個體的 geometry 為 「簡單」(simple),它必須符合以下兩個需求:
此例項的每一個圖形都不能自己相交 (除了在它的端點上以外)。
此例項的兩個圖形不能在非兩者界限內的點上彼此相交。
注意
空的幾何一定是簡單的幾何。
判斷執行個體是否為簡單
STIsSimple (geometry 資料類型) 。
界限、內部和外部
geometry 執行個體的 「內部」 (Interior) 是此執行個體所佔據的空間,而 「外部」 (Exterior) 則是未佔據它的空間。
「界限」 (Boundary) 是由 OGC 定義如下:
Point 和 MultiPoint 執行個體沒有界限。
LineString 和 MultiLineString 界限是由起點和終點所組成,移除發生偶數次數的點。
DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((0 1, 0 0, 1 0, 0 1), (1 1, 1 0))');
SELECT @g.STBoundary().ToString();
Polygon 或 MultiPolygon 執行個體的界限是它的環形集合。
DECLARE @g geometry;
SET @g = geometry::Parse('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1))');
SELECT @g.STBoundary().ToString();
傳回執行個體的界限
STBoundary (geometry 數據類型)
範圍
geometry 執行個體的 「範圍」 (Envelope) (也稱為 「週框方塊」(Bounding Box)) 是執行個體的最小和最大座標 (X,Y) 組成的座標軸對齊矩形。
傳回執行個體的範圍
STEnvelope (geometry 數據類型)
終止
「封閉式」geometry 執行個體是起始點與結束點相同的圖形。 Polygon 執行個體視為封閉式。 Point 執行個體視為非封閉式。
環形是簡單、封閉的 LineString 執行個體。
判斷執行個體是否為封閉
STIsClosed (geometry 資料類型)
判斷執行個體是否為環形
STIsRing (geometry 資料類型)
傳回 Polygon 執行個體的外部環形
STExteriorRing (geometry 資料類型)
傳回 Polygon 中的內部環形數
STNumInteriorRing (geometry 資料類型)
傳回 Polygon 的指定內部環形
STInteriorRingN (geometry 資料類型)
空間參考識別碼 (SRID)
空間參考識別碼 (SRID) 是用來指定代表 geometry 執行個體之座標系統的識別碼。 具有不同 SRID 的兩個執行個體無法進行比較。
設定或傳回執行個體的 SRID
STSrid (geometry 資料類型)
注意
這個屬性可以修改。
判斷 geometry 實例之間的關聯性
geometry 資料類型提供許多內建方法,您可以使用這些方法來判斷兩個 geometry 執行個體之間的關聯性。
判斷兩個執行個體是否組成相同的點集合
STEquals (geometry 資料類型)
判斷兩個執行個體是否不相交
STDisjoint (geometry 資料類型)
判斷兩個執行個體是否相交
STIntersects (geometry 資料類型)
判斷兩個執行個體是否接觸
STTouches (geometry 數據類型)
判斷兩個執行個體是否重疊
STOverlaps (geometry 數據類型)
判斷兩個執行個體是否交叉
STCrosses (geometry 數據類型)
判斷某個執行個體是否在另一個執行個體內
STWithin (geometry 數據類型)
判斷某個執行個體是否包含另一個執行個體
STContains (geometry 數據類型)
判斷某個執行個體是否與另一個執行個體重疊
STOverlaps (geometry 數據類型)
判斷兩個執行個體在空間上是否相關
STRelate (geometry 數據類型)
判斷兩個 geometry 內點與點之間的最短距離
STDistance (geometry 資料類型)
geometry 實例 預設為零 SRID
SQL Server 中 geometry 實例的預設 SRID 為 0
。 有了 geometry 空間資料,執行計算時並不需要空間執行個體的特定 SRID;因此,執行個體可位於未定義的平面空間內。 若要在 geometry 資料類型方法的計算中指出未定義的平面空間,SQL Server 資料庫引擎 會使用 SRID 0
。
備註
geometry 和 geography 類型不能當做 Microsoft Fabric 中 SQL 分析端點中的數據表數據行,或Microsoft Fabric 中的倉儲。
範例
下列兩個範例示範如何加入及查詢幾何資料。
範例 A。
此範例會建立具有識別資料行及 geometry
資料行 GeomCol1
的資料表。 第三個資料行會將 geometry
資料行轉譯成它的開放地理空間協會 (Open Geospatial Consortium,OGC) 已知的文字 (Well-Known Text,WKT) 表示法,並使用 STAsText()
方法。 然後會插入兩個資料列:一個資料列包含 LineString
的 geometry
執行個體,另一個資料列包含 Polygon
執行個體。
IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL
DROP TABLE dbo.SpatialTable;
GO
CREATE TABLE SpatialTable
( id int IDENTITY (1,1),
GeomCol1 geometry,
GeomCol2 AS GeomCol1.STAsText()
);
GO
INSERT INTO SpatialTable (GeomCol1)
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));
INSERT INTO SpatialTable (GeomCol1)
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));
GO
範例 B.
此範例會使用 STIntersection()
方法傳回之前所插入兩個 geometry
執行個體相交的點。
DECLARE @geom1 geometry;
DECLARE @geom2 geometry;
DECLARE @result geometry;
SELECT @geom1 = GeomCol1 FROM SpatialTable WHERE id = 1;
SELECT @geom2 = GeomCol1 FROM SpatialTable WHERE id = 2;
SELECT @result = @geom1.STIntersection(@geom2);
SELECT @result.STAsText();