Поделиться через


MultiPolygon

Экземпляр MultiPolygon представляет собой коллекцию экземпляров Polygon.

Экземпляры многоугольников

На рисунке ниже приведены примеры экземпляров MultiPolygon.

Примеры объектов MultiPolygon типа geometry

На рисунке представлены:

  • 1 — экземпляр типа MultiPolygon с двумя элементами Polygon. Граница определяется двумя внешними кольцами и тремя внутренними кольцами.

  • 2 — экземпляр типа MultiPolygon с двумя элементами Polygon. Граница определяется двумя внешними кольцами и тремя внутренними кольцами. Два элемента 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)))';

В следующем примере показан экземпляр MultiPolygon, который вызывает исключение System.FormatException.

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. Никакие экземпляры Polygon, составляющие экземпляр MultiPolygon, не перекрываются.

В следующем примере показаны два допустимых экземпляра 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 перекрываются.

Примеры

Следующий пример демонстрирует создание экземпляра MultiPolygon типа geometry и возвращает второй компонент в формате 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');

См. также

Справочник

STArea (тип данных geometry)

STCentroid (тип данных geometry)

STPointOnSurface (тип данных geometry)

Основные понятия

Polygon

Пространственные данные (SQL Server)