Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A CurvePolygon é uma superfície topologicamente fechada definida por um anel delimitador exterior e zero ou mais anéis interiores
Importante
Para obter uma descrição detalhada e exemplos de recursos espaciais introduzidos no SQL Server 2012, incluindo o CurvePolygon subtipo, baixe o white paper, Novos Recursos Espaciais no SQL Server 2012.
Os seguintes critérios definem atributos de uma CurvePolygon instância:
O limite da
CurvePolygoninstância é definido pelo anel exterior e todos os anéis interiores.O interior da
CurvePolygoninstância é o espaço entre o anel exterior e todos os anéis interiores.
Uma CurvePolygon instância difere de uma Polygon instância em que uma CurvePolygon instância pode conter os seguintes segmentos de arco circular: CircularString e CompoundCurve.
Instâncias de CompoundCurve
A ilustração abaixo mostra os números válidos CurvePolygon :
Instâncias aceitas
Para que uma CurvePolygon instância seja aceita, ela precisa estar vazia ou conter apenas anéis de arco circular que são aceitos. Um anel de arco circular aceito atende aos requisitos a seguir.
É uma instância aceita
LineString,CircularStringouCompoundCurve. Para obter mais informações sobre instâncias aceitas, consulte LineString, CircularString e CompoundCurve.Tem pelo menos quatro pontos.
O ponto inicial e final tem as mesmas coordenadas X e Y.
Observação
Os valores de Z e M são ignorados.
O exemplo a seguir mostra as instâncias aceitas de CurvePolygon.
DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0, 0 0))';
DECLARE @g3 geometry = 'CURVEPOLYGON((0 0 1, 0 0 2, 0 0 3, 0 0 3))'
DECLARE @g4 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';
DECLARE @g5 geography = 'CURVEPOLYGON((-122.3 47, 122.3 -47, 125.7 -49, 121 -38, -122.3 47))';
@g3 é aceito mesmo que os pontos de início e de término tenham valores Z diferentes porque os valores Z são ignorados.
@g5 é aceito mesmo que a geography instância de tipo não seja válida.
Os exemplos a seguir geram System.FormatException.
DECLARE @g1 geometry = 'CURVEPOLYGON((0 5, 0 0, 0 0, 0 0))';
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0))';
@g1 não é aceito porque os pontos de início e de término não têm o mesmo valor Y.
@g2 não é aceito porque o anel não tem pontos suficientes.
Instâncias válidas
Para que uma CurvePolygon instância seja válida, os anéis externos e internos devem atender aos seguintes critérios:
Eles só podem tocar em pontos tangentes únicos.
Eles não podem se cruzar.
Cada anel deve conter pelo menos quatro pontos.
Cada anel deve ser de um tipo de curva aceitável.
CurvePolygon instâncias também precisam atender a critérios específicos, dependendo se são do tipo de dados geometry ou geography.
Tipo de dados geometria
Uma instância geometryCurvePolygon válida deve ter os seguintes atributos:
Todos os anéis interiores devem estar contidos dentro do anel exterior.
Pode ter vários anéis interiores, mas um anel interior não pode conter outro anel interior.
Nenhum anel pode se cruzar ou outro anel.
Os anéis só podem tocar em pontos tangentes únicos (número de pontos em que o toque dos anéis deve ser finito).
O interior do polígono deve estar conectado.
O exemplo a seguir mostra instâncias geometryCurvePolygon válidas.
DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';
DECLARE @g2 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';
SELECT @g1.STIsValid(), @g2.STIsValid();
As instâncias curvePolygon têm as mesmas regras de validade que as instâncias do Polygon, com a exceção de que as instâncias curvePolygon podem aceitar os novos tipos de segmento de arco circular. Para obter mais exemplos de instâncias válidas ou não válidas, consulte Polygon.
Tipo de dados geografia
Uma instância geographyCurvePolygon válida deve ter os seguintes atributos:
O interior do polígono é conectado usando a regra da mão esquerda.
Nenhum anel pode cruzar a si mesmo ou outro anel.
Os anéis só podem tocar em pontos tangentes únicos (número de pontos em que o toque dos anéis deve ser finito).
O interior do polígono deve estar conectado.
O exemplo a seguir mostra uma instância válida de CurvePolygon de Geografia.
DECLARE @g geography = 'CURVEPOLYGON((-122.3 47, 122.3 47, 125.7 49, 121 38, -122.3 47))';
SELECT @g.STIsValid();
Exemplos
Um. Instanciando uma instância de geometria com um CurvePolygon vazio
Este exemplo mostra como criar uma instância vazia CurvePolygon :
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON EMPTY');
B. Declarando e instanciando uma instância de geometria com um CurvePolygon na mesma declaração
Este snippet de código mostra como declarar e inicializar uma instância de geometria com uma CurvePolygon na mesma instrução:
DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'
C. Instanciando uma instância de geografia com um CurvePolygon
Este snippet de código mostra como declarar e inicializar uma geography instância com um CurvePolygon:
DECLARE @g geography = 'CURVEPOLYGON(CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';
D. Armazenando um CurvePolygon com apenas um anel delimitador externo
Este exemplo mostra como armazenar um círculo simples em uma CurvePolygon instância (somente um anel delimitadora exterior é usado para definir o círculo):
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');
SELECT @g.STArea() AS Area;
E. Armazenando um CurvePolygon que contém anéis interiores
Este exemplo cria um donut em uma CurvePolygon instância (um anel delimitador exterior e um anel interior são usados para definir o rosca):
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 4, 4 0, 8 4, 4 8, 0 4), CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');
SELECT @g.STArea() AS Area;
Este exemplo mostra uma instância válida CurvePolygon e uma instância inválida ao usar anéis interiores:
DECLARE @g1 geometry, @g2 geometry;
SET @g1 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (-2 2, 2 2, 2 -2, -2 -2, -2 2))');
IF @g1.STIsValid() = 1
BEGIN
SELECT @g1.STArea();
END
SET @g2 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (0 5, 5 0, 0 -5, -5 0, 0 5))');
IF @g2.STIsValid() = 1
BEGIN
SELECT @g2.STArea();
END
SELECT @g1.STIsValid() AS G1, @g2.STIsValid() AS G2;
Ambos @g1 e @g2 usem o mesmo anel delimitado exterior: um círculo com um raio de 5 e ambos usam um quadrado para um anel interior. No entanto, a instância @g1 é válida, mas a instância @g2 é inválida. O motivo inválido @g2 é que o anel interior divide o espaço interior delimitado pelo anel exterior em quatro regiões separadas. O desenho a seguir mostra o que ocorreu:
Consulte Também
Polígono
CircularString
CompoundCurve
Referência do método de tipo de dados geometry
Referência do Método do Tipo de Dados de Geografia
Visão geral dos tipos de dados espaciais