Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A Polygon é uma superfície bidimensional armazenada como uma sequência de pontos definindo um anel delimitador exterior e zero ou mais anéis interiores.
Instâncias de polígono
Uma Polygon instância pode ser formada a partir de um anel que tem pelo menos três pontos distintos. Uma Polygon instância também pode estar vazia.
O limite de um Polygon é definido pelo seu exterior e pelos anéis interiores. O espaço dentro dos anéis define o interior do Polygon.
A ilustração abaixo mostra exemplos de casos de Polygon.
Conforme mostrado na ilustração:
A Figura 1 é uma
Polygoninstância cujo limite é definido por um anel exterior.A Figura 2 é uma
Polygoninstância cujo limite é definido por um anel exterior e dois anéis interiores. A área dentro dos aros internos faz parte do exterior da instânciaPolygon.A Figura 3 é uma instância válida
Polygonporque seus anéis interiores se cruzam em um único ponto tangente.
Instâncias aceitas
As instâncias aceitas Polygon são instâncias que podem ser armazenadas em uma geometry ou geography variável sem gerar uma exceção. As seguintes são instâncias aceitas Polygon :
Uma instância vazia
PolygonUma
Polygoninstância que tem um anel exterior aceitável e zero ou mais anéis interiores aceitáveis
Os critérios a seguir são necessários para que um anel seja aceitável.
A
LineStringinstância deve ser aceita.A
LineStringinstância deve ter pelo menos quatro pontos.Os pontos iniciais e finais da
LineStringinstância devem ser os mesmos.
O exemplo a seguir mostra as instâncias aceitas de Polygon.
DECLARE @g1 geometry = 'POLYGON EMPTY';
DECLARE @g2 geometry = 'POLYGON((1 1, 3 3, 3 1, 1 1))';
DECLARE @g3 geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(0 0, 3 0, 3 3, 0 3, 0 0))';
DECLARE @g4 geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(3 0, 6 0, 6 3, 3 3, 3 0))';
DECLARE @g5 geometry = 'POLYGON((1 1, 1 1, 1 1, 1 1))';
Como @g4 e @g5 mostram que uma instância aceita Polygon pode não ser uma instância válida Polygon.
@g5 também mostra que uma instância de Polígono precisa conter apenas um anel com quaisquer quatro pontos para ser aceita.
Os exemplos a seguir geram um System.FormatException porque as Polygon instâncias não são aceitas.
DECLARE @g1 geometry = 'POLYGON((1 1, 3 3, 1 1))';
DECLARE @g2 geometry = 'POLYGON((1 1, 3 3, 3 1, 1 5))';
@g1 não é aceito porque a LineString instância do anel exterior não contém pontos suficientes.
@g2 não é aceito porque o ponto de partida da instância do anel LineString exterior não é o mesmo que o ponto final. O exemplo a seguir tem um anel exterior aceitável, mas o anel interior não é aceitável. Isso também lança um System.FormatException.
DECLARE @g geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(0 0, 3 0, 0 0))';
Instâncias válidas
Os anéis interiores de um Polygon podem tocar entre si e uns aos outros em pontos de tangência únicos, mas se os anéis interiores de um Polygon cruzarem, a instância não é válida.
O exemplo a seguir mostra instâncias Polygon válidas.
DECLARE @g1 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20))';
DECLARE @g2 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0))';
DECLARE @g3 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (-10 0, 0 10, -5 -10, -10 0))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();
@g3 é válido porque os dois anéis interiores tocam em um único ponto e não se cruzam. O exemplo a seguir mostra Polygon instâncias que não são válidas.
DECLARE @g1 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (20 0, 0 10, 0 -20, 20 0))';
DECLARE @g2 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (5 0, 1 5, 1 -5, 5 0))';
DECLARE @g3 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (-10 0, 0 10, 0 -10, -10 0))';
DECLARE @g4 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (-10 0, 1 5, 0 -10, -10 0))';
DECLARE @g5 geometry = 'POLYGON((10 0, 0 10, 0 -10, 10 0), (-20 -20, -20 20, 20 20, 20 -20, -20 -20) )';
DECLARE @g6 geometry = 'POLYGON((1 1, 1 1, 1 1, 1 1))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid(), @g5.STIsValid(), @g6.STIsValid();
@g1 não é válido porque o anel interno toca o anel exterior em dois pontos.
@g2 não é válido porque o segundo anel interno está dentro do primeiro anel interno.
@g3 não é válido porque os dois anéis internos se encontram em múltiplos pontos consecutivos.
@g4 não é válido porque os interiores dos dois anéis internos se sobrepõem.
@g5 não é válido porque o anel exterior não é o primeiro anel.
@g6 não é válido porque o anel não tem pelo menos três pontos distintos.
Exemplos
O exemplo a seguir cria uma instância simples geometry``Polygon com um buraco e SRID 10.
DECLARE @g geometry;
SET @g = geometry::STPolyFromText('POLYGON((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1))', 10);
Uma aninstância que não é válida pode ser inserida e convertida em uma instância válida geometry . No exemplo a seguir, Polygonos anéis interior e exterior se sobrepõem e a instância não é válida.
DECLARE @g geometry;
SET @g = geometry::Parse('POLYGON((1 0, 0 1, 1 2, 2 1, 1 0), (2 0, 1 1, 2 2, 3 1, 2 0))');
No exemplo a seguir, a instância inválida torna-se válida com MakeValid().
SET @g = @g.MakeValid();
SELECT @g.ToString();
A geometry instância retornada do exemplo acima é um MultiPolygon.
MULTIPOLYGON (((2 0, 3 1, 2 2, 1.5 1.5, 2 1, 1.5 0.5, 2 0)), ((1 0, 1.5 0.5, 1 1, 1.5 1.5, 1 2, 0 1, 1 0)))
Aqui está outro exemplo de conversão de uma instância inválida em uma instância de geometria válida. No exemplo a seguir, a Polygon instância foi criada usando três pontos que são exatamente os mesmos:
DECLARE @g geometry
SET @g = geometry::Parse('POLYGON((1 3, 1 3, 1 3, 1 3))');
SET @g = @g.MakeValid();
SELECT @g.ToString()
A instância de geometria retornada acima é um Point(1 3). Se o Polygon dado for POLYGON((1 3, 1 5, 1 3, 1 3)), então MakeValid() retornaria LINESTRING(1 3, 1 5).
Consulte Também
STArea (tipo de dados geometry)STExteriorRing (tipo de dados geometry)STNumInteriorRing (tipo de dados geometry)STInteriorRingN (tipo de dados geometry)STCentroid (tipo de dados geometry)STPointOnSurface (tipo de dados geometry)MultiPolygonDados Espaciais (SQL Server)STIsValid (tipo de dados geography)STIsValid (tipo de dados geometry)