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


MultiPolygon

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечную точку аналитики SQL в хранилище Microsoft Fabric в базе данных SQL Microsoft Fabric в Microsoft Fabric

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

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

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

Схема примеров экземпляров geometry 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)))';  

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

Примеры

Пример А.

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