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');