空間資料的類型

空間資料有兩種類型:geometry 資料類型支援平面或 Euclidean (平面地球) 資料。geometry 資料類型符合開放式地理空間協會 (Open Geospatial Consortium,OGC) 的 SQL 簡單特徵規格 1.1.0 版。

此外,SQL Server 也支援 geography 資料類型,它會儲存橢圓體 (圓形地球) 資料,例如 GPS 經緯度座標。

geometry 和 geography 資料類型支援十一種空間資料物件或執行個體類型。但是,其中只有七種執行個體類型「可具現化」(Instantiable);因此,您可以在資料庫中建立及處理這些執行個體 (或加以具現化)。這些執行個體會從父資料類型衍生某些屬性,這些資料類型會將其區分為 Points、 LineStrings、Polygons 或 GeometryCollection 中的多個 geometry 或 geography 執行個體。

下圖說明 geometry 和 geography 資料類型所根據的 geometry 階層。可具現化的 geometry 和 geography 類型是以藍色標示。

Geometry 類型的階層

如圖中所指示,geometry 和 geography 資料類型中,七種可具現化的類型為 Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon 和 GeometryCollection。geometry 和 geography 類型可以辨識特定的執行個體 (只要格式正確),即使未明確定義執行個體亦然。例如,如果您使用 STPointFromText() 方法明確定義 Point 執行個體,則只要方法輸入的格式正確,geometry 和 geography 會將此執行個體辨識為 Point。如果您使用 STGeomFromText() 方法定義相同的執行個體,geometry 和 geography 資料類型都會將此執行個體辨識為 Point。

如需有關這些執行個體的詳細資訊,請參閱下列主題:

兩個資料類型之間的差異

這兩種類型的空間資料通常會有非常類似的行為,但是儲存及操作資料的方式會有一些重要的差異。

連接邊緣的定義方式

LineString 和 Polygon 類型的定義資料僅為頂點。幾何類型中兩個頂點的連接邊緣為直線。不過,地理位置類型中兩個頂點的連接邊緣為兩個頂點的最短大橢圓弧形。大橢圓形是橢圓體與經過其中心之平面的交集,而大橢圓弧形為大橢圓形上的弧形線段。

空間資料類型的度量

在平面或平面地球系統中,會使用與座標相同的度量單位來測量距離和區域。使用 geometry 資料類型時,(2, 2) 與 (5, 6) 之間的距離就是 5 單位 (不論所用的單位為何)。

在橢圓體 (或圓形地球) 系統中,會使用經緯度來提供座標。但是,長度和區域通常會使用公尺和平方公尺來測量,但是這樣的測量可能取決於 geography 執行個體的空間參考識別碼 (SRID)。geography 資料類型最常見的度量單位是公尺。

空間資料的方向

在平面系統中,多邊形的環形方向不是重要的因素。例如,((0, 0), (10, 0), (0, 20), (0, 0)) 描述的多邊形與 ((0, 0), (0, 20), (10, 0), (0, 0)) 描述的多邊形相同。OGC 的 SQL 簡單特徵規格並未指示環形順序,而且 SQL Server 並未強制使用環形順序。

在橢圓體系統中,多邊形如果沒有方向的話,將沒有任何意義或是會模稜兩可。例如,包圍赤道的環形是要描述北半球還是南半球?如果我們使用 geography 資料類型來儲存空間執行個體,就必須指定此環形的方向,並正確描述此執行個體的位置。

SQL Server 2008 對於 geography 資料類型的使用有以下限制:

  • 每一個 geography 執行個體都必須納入單一半球。大於半球的空間物件將無法儲存。

  • 當來自開放式地理空間協會 (Open Geospatial Consortium,OGC) 已知的文字 (Well-Known Text,WKT) 或已知的二進位 (Well-Known Binary,WKB) 表示法的任何 geography 執行個體產生大於半球的物件時,都會擲回 ArgumentException。

  • 需要兩個 geography 執行個體輸入的 geography 資料類型方法 (例如 STIntersection()STUnion()STDifference()STSymDifference()),將會在這些方法的結果未納入單一半球時,傳回 null。如果輸出超過單一半球,STBuffer() 也會傳回 null。

外部和內部環形在 geography 資料類型中不重要

OGC 的 SQL 簡單特徵規格討論了外部環形和內部環形,但是這樣的區別對於 SQL Servergeography 資料類型沒有很大的意義:多邊形的任何環形都可以當做外部環形。

如需有關 OGC 規格的詳細資訊,請參閱下列主題:

OGC 規格,簡單特徵存取第一部 - 常見架構 (英文)

OGC 規格,簡單特徵存取第二部 - SQL 選項 (英文)