空間類型 - geometry (Transact-SQL)
適用於:SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體
平面空間資料類型 geometry 在 SQL Server 中是實作為通用語言執行平台 (CLR) 資料類型。 此類型代表以 Euclidean (平面) 座標系統表示的資料。
SQL Server 支援一組 geometry 空間資料類型方法。 這些方法包括「開放地理空間協會」(OGC) 標準及該標準的一組 Microsoft 延伸模組所定義的 geometry 相關方法。
geometry 方法的誤差容許範圍可以大到 1.0e-7 *。 範圍指的是 geometry 物件的點之間大致的最大距離。
註冊 geometry 類型
geometry 類型已預先定義,而且可在每一個資料庫中使用。 您可以建立 geometry 類型的資料表資料行,並使用與其他 CLR 類型相同的方式來操作 geometry 資料。 可用於保存和非保存計算資料行。
範例
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();
C. 在計算資料行中使用幾何
下列範例會使用 geometry 類型來建立含有保存之計算資料行的資料表。
IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL
DROP TABLE dbo.SpatialTable;
GO
CREATE TABLE SpatialTable
(
locationId int IDENTITY(1,1),
location geometry,
deliveryArea as location.STBuffer(10) persisted
)