MultiPolygon
Экземпляр MultiPolygon представляет собой коллекцию экземпляров Polygon.
Экземпляры MultiPolygon
На следующем рисунке приведены примеры экземпляров MultiPolygon.
На рисунке представлены:
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)))';
В следующем примере показан экземпляр, выдающий исключение 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 или если он удовлетворяет следующим условиям.
Все экземпляры, из которых состоит экземпляр MultiPolygon, являются допустимыми экземплярами Polygon. Допустимые экземпляры Polygon см. в разделе Polygon.
Экземпляры 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');