共用方式為


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

平面空間資料類型 (geometry) 代表 Euclidean (平面) 座標系統中的資料。 這種類型在 SQL Server 中是實作為 Common Language Runtime (CLR) 資料類型。

geometry 類型已預先定義,而且可在每一個資料庫中使用。 您可以建立 geometry 類型的資料表資料行,並使用與其他 CLR 類型相同的方式來操作 geometry 資料。

geometrySQL Server支援的 (平面) 資料類型符合開放式地理空間聯盟 (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 實例,這是幾何物件的 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 實例都是由 組成。 這些點代表幾何繪製所在平面的 X 和 Y 座標。 geometry提供許多內建方法來查詢執行個體的點。

傳回組成執行個體的點數
STNumPoints (geometry 資料類型)

傳回執行個體中的特定點
STPointN

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

傳回執行個體的起點
STStartPoint

傳回執行個體的終點
STEndpoint

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

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

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

尺寸

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

傳回執行個體的維度
STDimension

傳回執行個體的長度
STLength

傳回執行個體的區域
STArea

空白

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

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

簡單

geometry若要讓 實例的簡單,它必須符合這兩個需求:

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

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

注意

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

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

界限、內部和外部

實例 的內部geometry 是 實例所佔用的空間,而 外部 則是未佔用的空間。

「界限」 (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 最小和最大 (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 中實例的預設 SRID geometry 為 0。 有了 geometry 空間資料,執行計算時並不需要空間執行個體的特定 SRID;因此,執行個體可位於未定義的平面空間內。 若要在資料類型方法的計算 geometry 中指出未定義的平面空間,SQL Server Database Engine 會使用 SRID 0。

範例

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

  • 第一個範例會建立具有識別資料行及 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  
    
  • 第二個範例使用 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)