MultiPolygon

MultiPolygon 实例是零个或更多个 Polygon 实例的集合。

MultiPolygon 实例

下图显示了 MultiPolygon 实例的示例。

几何 MultiPolygon 实例的示例

如图中所示:

  • 图 1 是一个包含两个 Polygon 元素的 MultiPolygon 实例。边界由两个外环和三个内环界定。

  • 图 2 是一个包含两个 Polygon 元素的 MultiPolygon 实例。边界由两个外环和三个内环界定。这两个 Polygon 元素在切点处相交。

接受的实例

在满足以下条件之一后,将接受 MultiPolygon 实例。

  • 该实例是空的 MultiPolygon 实例

  • 构成 MultiPolygon 实例的所有实例都接受 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 实例的信息,请参阅 多边形

  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 实例,并返回第二个组件的熟知文本 (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');