共用方式為


建立、建構及查詢幾何執行個體

適用於:SQL Server Azure SQL 資料庫 Azure 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 執行個體

geometry 資料類型提供數種內建方法,可從開放式地理空間協會 (Open Geospatial Consortium,OGC) 的 WKT 表示法產生幾何。 WKT 標準是一種文字字串,可允許使用文字格式交換幾何資料。

從 WKT 輸入建構任何類型的 geometry 執行個體
STGeomFromText (geometry 資料類型)

Parse (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 資料類型)

從已知的二進位輸入建構 geometry 執行個體

WKB 是 OGC 指定的一種二進位格式,可允許在用戶端應用程式與 SQL 資料庫之間交換 geometry 資料。 下列函數可接受 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 執行個體

geometry 資料類型提供了一個方法從 GML 產生 geometry 執行個體,GML 是幾何物件的 XML 表示法。 SQL Server 可支援 GML 的子集。

從 GML 輸入建構任何類型的 geometry 執行個體
GeomFromGml (geometry 資料類型)

從 geometry 執行個體傳回已知的文字和已知的二進位

您可以使用下列方法傳回 WKT 或 WKB 格式的 geometry 執行個體:

傳回 WKT 表示法的 geometry 執行個體
STAsText (geometry 資料類型)

ToString (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

傳回位於執行個體上的任意點
STPointOnSurface

傳回執行個體的起點
STStartPoint

傳回執行個體的終點
STEndpoint

傳回 Point 執行個體的 X 座標
STX (geometry 資料類型)

傳回 Point 執行個體的 Y 座標
STY

傳回 Polygon、CurvePolygon 或 MultiPolygon 執行個體的幾何中心點
STCentroid

尺寸

非空的 geometry 執行個體可以是 0 維度、1 維度或 2 維度。 PointMultiPoint 等零維 幾何沒有長度或區域。 LineString、CircularString、CompoundCurveMultiLineString等一維物件有長度。 PolygonCurvePolygonMultiPolygon等二維執行個體有區域和長度。 空的執行個體會報告 -1 的維度,而 GeometryCollection 則會報告與其內容類型相依的區域。

傳回執行個體的維度
STDimension

傳回執行個體的長度
STLength

傳回執行個體的區域
STArea

空白

「空的」geometry 執行個體沒有任何點。 空的 LineString, CircularStringCompoundCurveMultiLineString 執行個體的長度是零。 空的 PolygonCurvePolygonMultiPolygon 執行個體的區域是 0。

判斷執行個體是否為空的
STIsEmpty

簡單

如果要讓執行個體的 geometry「簡單」(simple),它必須符合以下兩個需求:

  • 此例項的每一個圖形都不能自己相交 (除了在它的端點上以外)。

  • 此例項的兩個圖形不能在非兩者界限內的點上彼此相交。

注意

空的幾何一定是簡單的幾何。

判斷執行個體是否為簡單
STIsSimple

界限、內部和外部

geometry 執行個體的 「內部」 (Interior) 是此執行個體所佔據的空間,而 「外部」 (Exterior) 則是未佔據它的空間。

「界限」 (Boundary) 是由 OGC 定義如下:

  • PointMultiPoint 執行個體沒有界限。

  • LineStringMultiLineString 界限是由起點和終點所組成,移除發生偶數次數的點。

DECLARE @g geometry;  
SET @g = geometry::Parse('MULTILINESTRING((0 1, 0 0, 1 0, 0 1), (1 1, 1 0))');  
SELECT @g.STBoundary().ToString();  

PolygonMultiPolygon 執行個體的界限是它的環形集合。

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 執行個體的 「範圍」 (Envelope) (也稱為 「週框方塊」(Bounding Box)) 是執行個體的最小和最大座標 (X,Y) 組成的座標軸對齊矩形。

傳回執行個體的範圍
STEnvelope

終止

「封閉式」geometry 執行個體是起始點與結束點相同的圖形。 Polygon 執行個體視為封閉式。 Point 執行個體視為非封閉式。

環形是簡單、封閉的 LineString 執行個體。

判斷執行個體是否為封閉
STIsClosed

判斷執行個體是否為環形
STIsRing

傳回 Polygon 執行個體的外部環形
STExteriorRing

傳回 Polygon 中的內部環形數
STNumInteriorRing

傳回 Polygon 的指定內部環形
STInteriorRingN

空間參考識別碼 (SRID)

空間參考識別碼 (SRID) 是用來指定代表 geometry 執行個體之座標系統的識別碼。 具有不同 SRID 的兩個執行個體無法進行比較。

設定或傳回執行個體的 SRID
STSrid

注意

這個屬性可以修改。

判斷 geometry 執行個體之間的關聯性

geometry 資料類型提供許多內建方法,您可以使用這些方法來判斷兩個 geometry 執行個體之間的關聯性。

判斷兩個執行個體是否組成相同的點集合
STEquals

判斷兩個執行個體是否不相交
STDisjoint

判斷兩個執行個體是否相交
STIntersects

判斷兩個執行個體是否接觸
STTouches

判斷兩個執行個體是否重疊
STOverlaps

判斷兩個執行個體是否交叉
STCrosses

判斷某個執行個體是否在另一個執行個體內
STWithin

判斷某個執行個體是否包含另一個執行個體
STContains

判斷某個執行個體是否與另一個執行個體重疊
STOverlaps

判斷兩個執行個體在空間上是否相關
STRelate

判斷兩個 geometry 內點與點之間的最短距離
STDistance

geometry 執行個體預設為零 SRID

SQL Server 中 geometry 執行個體的預設 SRID 是 0。 有了 geometry 空間資料,執行計算時並不需要空間執行個體的特定 SRID;因此,執行個體可位於未定義的平面空間內。 若要在 geometry 資料類型方法的計算中指示未定義的平面空間,SQL Server 資料庫引擎會使用 SRID 0。

範例

下列兩個範例示範如何加入及查詢幾何資料。

範例 A。

此範例會建立具有識別資料行及 geometry 資料行 GeomCol1 的資料表。 第三個資料行會將 geometry 資料行轉譯成它的開放地理空間協會 (Open Geospatial Consortium,OGC) 已知的文字 (Well-Known Text,WKT) 表示法,並使用 STAsText() 方法。 然後會插入兩個資料列:一個資料列包含 LineStringgeometry執行個體,另一個資料列包含 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();  

另請參閱

空間資料 (SQL Server)