MultiPolygon

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

MultiPolygon 執行個體是由零個或多個 Polygon 執行個體組成的集合。

多邊形實例

下圖顯示 MultiPolygon 實例的範例。

幾何 MultiPolygon 實例範例圖。

如本圖所示:

  • 圖 1 是一個包含兩個 Polygon 元素的 MultiPolygon 執行個體。 界限是由兩個外部環形和三個內部環形所定義。

  • 圖 2 是一個包含兩個 Polygon 元素的 MultiPolygon 實例。 界限是由兩個外部環形和三個內部環形所定義。 這兩個 Polygon 元素會在正切點相交。

被接受的實例

如果符合下列任一條件,則接受 MultiPolygon 執行個體。

  • 它是空的 MultiPolygon 執行個體。

  • 組成 MultiPolygon 執行個體的所有執行個體都是可接受的 Polygon 執行個體。 如需可接受的 Polygon 執行個體的詳細資訊,請參閱< Polygon>。

以下範例說明可接受的 MultiPolygon 執行個體。

DECLARE @g1 geometry = 'MULTIPOLYGON EMPTY';  
DECLARE @g2 geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3, 1 3, 1 1)))';  
DECLARE @g3 geometry = 'MULTIPOLYGON(((2 2, 2 -2, -2 -2, -2 2, 2 2)),((1 1, 3 1, 3 3, 1 3, 1 1)))';  

下列範例顯示會引發 System.FormatException 的 MultiPolygon 執行個體。

DECLARE @g geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3)))';  

MultiPolygon 中的第二個執行個體是 LineString 執行個體,不是可接受的 Polygon 執行個體。

有效實例

如果 MultiPolygon 執行個體是空的 MultiPolygon 執行個體或符合下列準則,則為有效的執行個體。

  1. 構成 MultiPolygon 執行個體的所有個體,都是有效的 Polygon 執行個體。 如需瞭解有效的 Polygon 執行個體,請參閱 Polygon。

  2. 組成 MultiPolygon 執行個體的各個 Polygon 執行個體彼此皆不重疊。

下列範例示範兩個有效的 MultiPolygon 執行個體和一個無效的 MultiPolygon 執行個體。

DECLARE @g1 geometry = 'MULTIPOLYGON EMPTY';  
DECLARE @g2 geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3, 1 3, 1 1)))';  
DECLARE @g3 geometry = 'MULTIPOLYGON(((2 2, 2 -2, -2 -2, -2 2, 2 2)),((1 1, 3 1, 3 3, 1 3, 1 1)))';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();  

@g2 是有效的,因為這兩個 Polygon 執行個體僅在一個相切點相接。 @g3 無效,因為這兩個 Polygon 執行個體的內部互相重疊。

Examples

範例A。

下列範例示範如何建立 geometry MultiPolygon 執行個體,並傳回第二個元件的 Well-Known Text (WKT)。

DECLARE @g geometry;  
SET @g = geometry::Parse('MULTIPOLYGON(((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1)), ((9 9, 9 10, 10 9, 9 9)))');  
SELECT @g.STGeometryN(2).STAsText();  

範例B。

此範例會具現化空的 MultiPolygon 執行個體。

DECLARE @g geometry;  
SET @g = geometry::Parse('MULTIPOLYGON EMPTY');