平面空間數據類型 geometry,代表 Euclidean (平面) 座標系統中的數據。 此類型會在 SQL Server 中實作為 Common Language Runtime (CLR) 資料類型。
此 geometry 類型是預先定義的,而且可在每個資料庫中使用。 您可以建立類型為 geometry 的資料表欄位,並以使用其他 CLR 類型相同的方式操作 geometry 資料。
geometry SQL Server 支援的數據類型 (planar) 符合 SQL 規格 1.1.0 版開放式地理空間聯盟 (OGC) 簡單功能。
如需 OGC 規格的詳細資訊,請參閱下列各項:
SQL Server 支援現有 GML 3.1 標準的子集,此標準定義於下列架構中: https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd。
建立或建構新的幾何實例
從現有的實例建立新的幾何實例
數據類型 geometry 提供許多內建方法,可讓您用來根據現有的實例建立新的 geometry 實例。
在幾何周圍建立緩衝區
STBuffer(幾何資料類型)
BufferWithTolerance (geometry 資料類型)
建立簡化的幾何版本
簡化(geometry 數據類型)
建立幾何的凸殼
STConvexHull (geometry 幾何資料類型)
從兩個幾何的交集建立幾何
STIntersection (geometry 資料類型)
從兩個幾何的聯集建立幾何
STUnion(geometry 數據類型)
在一個幾何圖形不與另一個重疊的點上建立幾何圖形
STDifference (geometry 資料類型)
從兩個幾何不重疊的點建立幾何
STSymDifference(geometry 資料類型)
建立位於現有幾何上的任意 Point 實例
STPointOnSurface (幾何數據類型)
從 Well-Known 文本輸入構建幾何實例
數據類型 geometry 提供數個內建方法,可從開放式地理空間聯盟 (OGC) WKT 表示法產生幾何。 WKT 標準是一個文字字串,可讓幾何數據以文字形式交換。
從 WKT 輸入來建構任意類型的幾何實例
STGeomFromText (幾何資料類型)
從 WKT 輸入建構 geometry Point 實例
STPointFromText (geometry 資料類型)
透過 WKT 輸入建構 MultiPoint 幾何實例
STMPointFromText (geometry 資料類型)
從 WKT 輸入建構 geometry LineString 實例
STLineFromText(geometry 數據類型)
從 WKT 輸入建構一個几何形 MultiLineString 實例
STMLineFromText(geometry 資料類型)
從 WKT 輸入建構幾何多邊形實例
STPolyFromText (geometry 數據類型)
從 WKT 輸入建構幾何 MultiPolygon 實例
STMPolyFromText (geometry 數據類型)
從 WKT 輸入中建構幾何 GeometryCollection 實例
STGeomCollFromText(geometry 數據類型)
從 Well-Known 二進位輸入構建幾何實例
WKB 是由 Open Geospatial Consortium (OGC) 所指定的二進位格式,允許 geometry 在用戶端應用程式與 SQL 資料庫之間交換數據。 下列函式接受 WKB 輸入來建構幾何:
從 WKB 輸入構建任何類型的幾何實例
STGeomFromWKB (geometry 數據類型)
從 WKB 輸入建構 geometry Point 實例
STPointFromWKB (geometry 資料類型)
以 WKB 為輸入建構幾何 MultiPoint 物件
STMPointFromWKB (幾何 數據類型)
從 WKB 輸入建構幾何 LineString 實例
STLineFromWKB(geometry 數據類型)
從 WKB 輸入建構 MultiLineString 幾何實例
STMLineFromWKB (幾何數據類型)
從 WKB 輸入建構幾何多邊形實例
STPolyFromWKB (geometry 數據類型)
從 WKB 輸入中建構一個幾何MultiPolygon實例
STMPolyFromWKB (geometry 資料型別)
從 WKB 輸入建構幾何圖形集合實例
STGeomCollFromWKB (geometry 數據類型)
從 GML 文字輸入建構幾何實例
數據類型 geometry 會提供方法,從 GML 產生 geometry 實例,這是幾何物件的 XML 表示法。 SQL Server 支援 GML 的子集。
從 GML 輸入建構任何類型的幾何實例
GeomFromGml (geometry 資料類型)
從幾何實例中傳回 Well-Known 文字和 Well-Known 二進位
您可以使用下列方法來傳回 geometry 實例的 WKT 格式或 WKB 格式:
傳回 geometry 實例的 WKT 表示法
STAsText (geometry 資料型態)
傳回 geometry 實例的 WKT 表示法,包括任何 Z 和 M 值
AsTextZM(geometry 幾何 資料類型)
以傳回 geometry 實例的 WKB 表示法
STAsBinary (幾何 資料類型)
返回 geometry 實例的 GML 表示法
AsGml (geometry 資料類型)
查詢幾何實例的屬性和行為
所有 geometry 實例都有數個屬性,可透過 SQL Server 提供的方法來擷取。 下列主題會定義幾何類型的屬性和行為,以及查詢每個類型的方法。
有效性、實例類型及幾何集合資訊
geometry建構實例之後,您可以使用下列方法來判斷其格式是否正確、傳回實例類型,或者,如果是集合實例,則傳回特定geometry實例。
返回几何体的实例类型
STGeometryType (幾何數據類型)
判斷 geometry 是否為指定的實例類型
InstanceOf (geometry 資料類型)
判斷 geometry 實例是否適合其實例類型
STIsValid (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,例如 Point 和 MultiPoint,沒有長度或區域。 一維物件,例如 LineString, CircularString, CompoundCurve、 和 MultiLineString,具有長度。 、CurvePolygon、 和 MultiPolygon等Polygon二維實例具有區域和長度。 空的實例會報告 -1 的維度,而 GeometryCollection 會報告與其內容類型相依的區域。
傳回實例的維度
STDimension
傳回實例的長度
STLength
傳回實例的區域
STArea
空
空geometry的實例沒有任何點。 空 LineString, CircularString的、 CompoundCurve和 MultiLineString 實例的長度為零。 空白 Polygon、 CurvePolygon和 MultiPolygon 實例的區域為 0。
判斷實例是否為空白
STIsEmpty。
簡單
將實例 geometry 設為 簡單,必須符合以下兩個要求:
實例的每個圖形不得彼此交集,但其端點除外。
實例中的兩個圖形無法在不屬於它們共同邊界的點上相交。
備註
空幾何一律很簡單。
判斷實例是否簡單
STIsSimple。
界限、內部和外部
實例的內部geometry是 實例所佔用的空間,而外部則是未佔用的空間。
界限 是由 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信封,也稱為周框方塊,是座標軸對齊的矩形,由實例的最小和最大值 (X,Y) 座標組成。
退回某個實例的信封
STEnvelope
結案
封閉geometry的實例是一個圖形,其起點和終點相同。
Polygon 實例被視為已關閉。
Point 實例不會關閉。
一個環是簡單且封閉的 LineString 實例。
判斷實例是否已關閉
STIsClosed
判斷實例是否為環形
STIsRing
傳回 Polygon 實例的外部環形
STExteriorRing
傳回 Polygon 中的內部環形數目
STNumInteriorRing
傳回多邊形的指定內部環形
STInteriorRingN
空間參考識別碼 (SRID)
空間參考標識碼 (SRID) 是一個識別碼,指定實例所代表的座標系統 geometry 。 具有不同 SRID 的兩個實例是無法比擬的。
設定或傳回 實例的 SRID
STSrid
這個屬性可以修改。
判定幾何實例之間的關聯性
數據類型 geometry 提供許多內建方法,可用來判斷兩個 geometry 實例之間的關聯性。
判斷兩個實例是否組成相同的點集
STEquals
判斷兩個實例是否不相交
STDisjoint
判斷兩個實例是否相交
STIntersects
判斷兩個實例是否接觸
STTouches
判斷兩個實例是否重疊
STOverlaps
判斷兩個實例是否交叉
STCrosses
判斷某個實例是否在另一個實例內
STWithin
判斷某個實例是否包含另一個實例
STContains
判斷某個實例是否與另一個實例重疊
STOverlaps
判斷兩個實例是否在空間上相關
STRelate
判斷兩個幾何中點之間的最短距離
STDistance
幾何實例預設為 SRID 零
SQL Server 中實例的預設 SRID geometry 為 0。 使用 geometry 空間數據時,不需要空間實例的特定 SRID 來執行計算;因此,實例可以位於未定義的平面空間中。 若要在數據類型方法的計算 geometry 中指出未定義的平面空間,SQL Server 資料庫引擎會使用 SRID 0。
範例
下列兩個範例示範如何新增和查詢幾何數據。
第一個範例會建立具有識別欄位和
geometry欄位GeomCol1的數據表。 第三個欄會將geometry欄轉換成其在開放地理空間聯盟(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第二個範例使用
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();