Partilhar via


MultiPolygon

Uma instância MultiPolygon é uma coleção de zero ou mais instâncias Polygon.

Instâncias de polígono

A ilustração abaixo mostra exemplos de instâncias de MultiPolygon.

Exemplos das instâncias MultiPolygon de geometria

Conforme mostrado na ilustração:

  • A Figura 1 é uma instância MultiPolygon com dois elementos Polygon. O limite é definido pelos dois anéis exteriores e os três anéis interiores.

  • A Figura 2 é uma instância MultiPolygon com dois elementos Polygon. O limite é definido pelos dois anéis exteriores e os três anéis interiores. Os dois elementos Polygon cruzam em um ponto de tangente.

Instâncias aceitas

Uma instância de MultiPolygon é aceita quando uma das condições a seguir é atendida.

  • É uma instância de MultiPolygon vazia.

  • Todas as instâncias que englobam a instância de MultiPolygon são instâncias de Polygon aceitas. Para obter mais informações sobre instâncias de Polygon aceitas, consulte Polígono.

Os exemplos a seguir mostram as instâncias de MultiPolygon aceitas.

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

O exemplo a seguir mostra uma instância de MultiPolygon que emitirá um System.FormatException.

DECLARE @g geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3)))';

A segunda instância no MultiPolygon é uma instância de LineString e não uma instância de Polygon aceita.

Instâncias válidas

Uma instância de MultiPolygon será válida se for uma instância de MultiPolygon vazia ou se atender aos critérios a seguir.

  1. Todas as instâncias que englobam a instância de MultiPolygon são instâncias de Polygon válidas. Para instâncias de Polygon válidas, consulte Polígono.

  2. Nenhuma das instâncias de Polygon que englobe a instância de MultiPolygon se sobreporá.

O exemplo a seguir mostra duas instâncias de MultiPolygon válidas e uma instância de MultiPolygon inválida.

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 é válido porque as duas instâncias Polygon tocam somente um ponto tangente. @g3 não é válido porque os interiores das duas instâncias Polygon sobrepõem-se.

Exemplos

O exemplo a seguir mostra a criação de uma instância geometry MultiPolygone retorna o WKT (Well-Known Text) do segundo componente.

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

Este exemplo cria uma instância MultiPolygon vazia.

DECLARE @g geometry;
SET @g = geometry::Parse('MULTIPOLYGON EMPTY');

Consulte também

Referência

STArea (tipo de dados geometry)

STCentroid (tipo de dados geometry)

STPointOnSurface (tipo de dados geometry)

Conceitos

Polígono

Dados espaciais (SQL Server)