空間類型-地理

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Microsoft Fabric 中的 SQL 資料庫

地理空間資料類型 geography 會在 SQL Server 中實作為 .NET Common Language Runtime (CLR) 資料類型。 此類型代表圓形地球座標系統中的資料。 SQL Server geography 資料類型會儲存橢圓體 (圓形地球) 資料,例如 GPS 經緯度座標。

Note

在 Fabric SQL 資料庫中,允許使用空間類型的數據行,但不會鏡像到 Fabric OneLake。

SQL Server 支援 geography 空間資料類型的一組方法。 其中包括開放地理空間協會 (OGC) 標準所定義的 geography 方法,以及該標準的一組 Microsoft 擴充功能。

geography 方法容許的誤差範圍可以高達 1.0e-7 *。 範圍是指 geography 物件點之間的近似最大距離。

註冊地理類型

geography 類型已預先定義,而且可在每一個資料庫中使用。 您可以建立 geography 類型的資料表資料行,並使用與其他系統提供之類型相同的方式來操作 geography 資料。 此型別可用於持久化與非持久化計算欄位。

Conversion

從地理轉換為二元、varbinary、char、varchar、nchar 和 nvarchar 必須明確。 使用 CAST 或 CONVERT。

從二元、變形、char、varchar、nchar 和 nvarchar 轉換成地理學可以是隱含的,也可以是顯式的。

不允許在 地理 和所有其他資料型態之間轉換。 這包括地理與幾何之間的轉換。 若要在這兩種類型間移動資料,請使用 Well-Known 二進位(WKB)或 Well-Known 文字(WKT)方法,例如STAsBinary()將 。STGeomFromWKB()

從字串類型轉換為 地理類型 使用與 相同的規則 geography::Parse()。 字串必須是 Well-Known Text。 結果的SRID為4326。

地理與二進位或變分位之間的轉換使用地理SQL Server原生序列化格式,而非 Well-Known 二進位。 Well-Known 二進位值會造成錯誤。 若要轉換成或從二進位轉換 Well-Known,請使用 STAsBinary() 和 STGeomFromWKB()。

若目標字串或二進位型別對 地理 值來說太短,則會發生錯誤。 價值沒有被截斷。

備註

在 Microsoft Fabric 的 SQL 資料庫中,支援地理與幾何資料型別,但無法鏡像至 Fabric OneLake。

Examples

A. 展示如何新增及查詢地理資料

下列範例示範如何加入及查詢地理位置資料。 第一個範例會建立具有識別資料行及 geography 資料行 GeogCol1 的資料表。 第三個資料行會將 geography 資料行轉譯成它的開放地理空間協會 (Open Geospatial Consortium,OGC) 已知的文字 (Well-Known Text,WKT) 表示法,並使用 STAsText() 方法。 接著插入兩個資料列:其中一個資料列包含一個 LineString 的 geography 執行個體,另一個資料列包含一個 Polygon 執行個體。

IF OBJECT_ID('dbo.SpatialTable', 'U') IS NOT NULL
    DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable
(
    id INT IDENTITY (1, 1),
    GeogCol1 geography,
    GeogCol2 AS GeogCol1.STAsText()
);
GO

INSERT INTO SpatialTable
(
    GeogCol1
)
VALUES (geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656 )', 4326));

INSERT INTO SpatialTable
(
    GeogCol1
)
VALUES (geography::STGeomFromText('POLYGON((-122.358 47.653 , -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326));
GO

B. 回傳兩個地理實例的交集

下列範例使用 STIntersection() 方法傳回之前插入之兩個 geography 執行個體相交的點。

DECLARE @geog1 AS geography;

DECLARE @geog2 AS geography;

DECLARE @result AS geography;

SELECT @geog1 = GeogCol1
FROM SpatialTable
WHERE id = 1;

SELECT @geog2 = GeogCol1
FROM SpatialTable
WHERE id = 2;

SELECT @result = @geog1.STIntersection(@geog2);

SELECT @result.STAsText();

C. 在計算欄位中使用地理

下列範例會以使用 geography 型別的保存計算資料行來建立資料表。

IF OBJECT_ID('dbo.SpatialTable', 'U') IS NOT NULL
    DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable
(
    locationId INT IDENTITY (1, 1),
    location geography,
    deliveryArea AS location.STBuffer(10) PERSISTED
);