Share via


MultiPolygon

MultiPolygon 例項是零或多個 Polygon 例項的集合。

MultiPolygon 例項

下圖顯示 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 例項的內部彼此重疊。

範例

下列範例顯示 geometryMultiPolygon 例項的建立作業,並傳回第二個元件的已知的文字 (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();

此範例會具現化空的 MultiPolygon 例項。

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