分享方式:


建立、建構並查詢地理位置執行個體

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體

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

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

建立或建構新的地理位置執行個體

從現有的執行個體建立新的地理位置執行個體

geography 資料類型提供許多內建方法,您可以使用這些方法來根據現有執行個體建立新的 geography 執行個體。

在地理位置周圍建立緩衝區
STBuffer (geography 資料類型)

在地理位置周圍建立緩衝區,允許容錯
BufferWithTolerance (geography 資料類型)

從兩個 geography 執行個體的交集建立地理位置
STIntersection (geography 資料類型)

從兩個 geography 執行個體的聯集建立地理位置
STUnion (geography 資料類型)

從兩個地理位置不重疊的點建立地理位置
STDifference (geography 資料類型)

從已知的文字輸入建構地理位置執行個體

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

從 WKT 輸入建構任何類型的地理位置執行個體
STGeomFromText (geography 資料類型)

Parse (geography 資料類型)

從 WKT 輸入建構地理位置 Point 執行個體
STPointFromText (geography 資料類型)

從 WKT 輸入建構地理位置 MultiPoint 執行個體
STMPointFromText (geography 資料類型)

從 WKT 輸入建構地理位置 LineString 執行個體
STLineFromText (geography 資料類型)

從 WKT 輸入建構地理位置 MultiLineString 執行個體
STMLineFromText (geography 資料類型)

從 WKT 輸入建構地理位置 Polygon 執行個體
STPolyFromText (geography 資料類型)

從 WKT 輸入建構地理位置 MultiPolygon 執行個體
STMPolyFromText (geography 資料類型)

從 WKT 輸入建構地理位置 GeometryCollection 執行個體
STGeomCollFromText (geography 資料類型)

從已知的二進位輸入建構地理位置執行個體

WKB 是 OGC 指定的一種二進位格式,可允許在用戶端應用程式與 SQL 資料庫之間交換 Geography 資料。 下列函數可接受 WKB 輸入來建構地理位置執行個體:

從 WKB 輸入建構任何類型的地理位置執行個體
STGeomFromWKB (geography 資料類型)

從 WKB 輸入建構地理位置 Point 執行個體
STPointFromWKB (geography 資料類型)

從 WKB 輸入建構地理位置 MultiPoint 執行個體
STMPointFromWKB (geography 資料類型)

從 WKB 輸入建構地理位置 LineString 執行個體
STLineFromWKB (geography 資料類型)

從 WKB 輸入建構地理位置 MultiLineString 執行個體
STMLineFromWKB (geography 資料類型)

從 WKB 輸入建構地理位置 Polygon 執行個體
STPolyFromWKB (geography 資料類型)

從 WKB 輸入建構地理位置 MultiPolygon 執行個體
STMPolyFromWKB (geography 資料類型)

從 WKB 輸入建構地理位置 GeometryCollection 執行個體
STGeomCollFromWKB (geography 資料類型) STGeomCollFromWKB (geography 資料類型)

從 GML 文字輸入建構地理位置執行個體

geography 資料類型提供一種方法,從 GML 產生 geography 執行個體,而 GML 是 geography 執行個體的 XML 表示法。 SQL Server 可支援 GML 的子集。

如需地理標記語言的詳細資訊,請參閱 OGC 規格: OGC 規格、地理標記語言

從 GML 輸入建構任何類型的地理位置執行個體
GeomFromGML (geography 資料類型)

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

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

傳回 WKT 表示法的地理位置執行個體
STAsText (geography 資料類型)

ToString (geography 資料類型)

傳回 WKT 表示法的地理位置執行個體 (包含任何 Z 和 M 值)
AsTextZM (geography 資料類型)

傳回 WKB 表示法的地理位置執行個體
STAsBinary (geography 資料類型)

傳回地理位置執行個體的 GML 表示法
AsGml (geography 資料類型)

查詢地理位置執行個體的屬性和行為

所有 geography 執行個體都有許多屬性,這些屬性可透過 SQL Server 提供的方法來加以擷取。 下列主題定義地理位置類型的屬性和行為以及用來查詢每一個類型的方法。

有效性、執行個體類型和 GeometryCollection 資訊

一旦建構了 geography 執行個體之後,您就可以使用下列方法來判斷它的格式是否正確、傳回執行個體類型,或者如果它是 GeometryCollection 執行個體,就會傳回特定的 geography 執行個體。

傳回 geography 類型的執行個體
STGeometryType (geography 資料類型)

判斷 geography 是否為特定的執行個體類型
InstanceOf (geography 資料類型)

判斷 geography 執行個體對於它的執行個體類型而言是否格式正確
STNumGeometries (geography 資料類型)

傳回 GeometryCollection 執行個體中的特定地理位置
STGeometryN (geography 資料類型) STGeometryN (geography 資料類型)

點數

所有非空白的 geography 執行個體都是由 「點」(Point) 所組成。 這些點代表 geography 執行個體繪製所在之地球的經緯度座標。 geography 資料類型提供了許多內建方法來查詢執行個體的點。

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

傳回執行個體中的特定點
STPointN (geometry 資料類型)

傳回執行個體的起點
STStartPoint (geography 資料類型)

傳回執行個體的終點
STEndpoint (geography 資料類型)

尺寸

非空的 geography 執行個體可以是 0 維度、1 維度或 2 維度。 PointMultiPoint 等零維 geography沒有長度或區域。 LineString、CircularStringCompoundCurveMultiLineString這類一維物件都有長度。 Polygon、CurvePolygonMultiPolygon這類二維執行個體都有區域和長度。 空的執行個體會報告 -1 的維度,而 GeometryCollection 則會報告其內容的最大維度。

傳回執行個體的維度
STDimension (geography 資料類型)

傳回執行個體的長度
STLength (geography 資料類型)

傳回執行個體的區域
STArea (geography 資料類型)

空白

「空的」geography 執行個體沒有任何點。 空的 LineString、CircularStringCompoundCurveMultiLineString 執行個體的長度是 0。 空的 Polygon、CurvePolygonMultiPolygon 執行個體的區域是 0。

判斷執行個體是否為空的
STIsEmpty (geography 資料類型)

終止

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

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

判斷執行個體是否為封閉
STIsClosed (geography 資料類型)

傳回 Polygon 執行個體中的環形數
NumRings (geography 資料類型)

傳回 geography 執行個體的指定環形
RingN (geography 資料類型)

空間參考識別碼 (SRID)

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

設定或傳回執行個體的 SRID
STSrid (geography 資料類型)

這個屬性可以修改。

判斷地理位置執行個體之間的關聯性

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

判斷兩個執行個體是否組成相同的點集合
STEquals (geometry 資料類型)

判斷兩個執行個體是否不相交
STDisjoint (geometry 資料類型)

判斷兩個執行個體是否相交
STIntersects (geometry 資料類型)

判斷兩個執行個體相交所在的點
STIntersection (geography 資料類型)

判斷兩個 geography 執行個體中點與點之間的最短距離
STDistance (geometry 資料類型)

判斷兩個 geography 執行個體中點與點之間的差異
STDifference (geography 資料類型)

導出一個地理位置執行個體與另一個執行個體相較之下的對稱差異或唯一的點
STSymDifference (geography 資料類型)

地理位置執行個體必須使用支援的 SRID

SQL Server 支援以 EPSG 標準為根據的 SRID。 當執行計算或是搭配地理位置空間資料使用方法時,必須使用 SQL Server 支援之 geography 執行個體的 SRID。 SRID 必須符合 sys.spatial_reference_systems 目錄檢視中所顯示的其中一個 SRID。 如同之前所述,當您使用 geography 資料類型在您的空間資料上執行計算時,您的結果將會依據建立資料時使用哪一個橢圓體而定,因為每一個橢圓體都會指派一個特定的空間參考識別碼 (SRID)。

SQL Server 在 geography 執行個體上使用方法時,會使用預設 SRID 4326,此 SRID 會對應到 WGS 84 空間參考系統。 如果您使用 WGS 84 (或 SRID 4326) 以外之空間參考系統內的資料,您需要為您的地理位置空間資料決定特定的 SRID。

範例

下列範例示範如何加入及查詢地理位置資料。

範例 A。

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

另請參閱

空間資料 (SQL Server)