MultiPolygon
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечную точку аналитики SQL в хранилище Microsoft Fabric в базе данных SQL Microsoft Fabric в Microsoft Fabric
Экземпляр MultiPolygon представляет собой коллекцию экземпляров Polygon .
Экземпляры многоугольников
На рисунке ниже приведены примеры экземпляров 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 или удовлетворяет следующим требованиям.
Все экземпляры, составляющие экземпляр 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 перекрываются.
Примеры
Пример А.
Следующий пример демонстрирует создание экземпляра 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');