Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A CircularString é uma coleção de segmentos de arco circular zero ou mais contínuos. Um segmento de arco circular é um segmento curvo definido por três pontos em um plano bidimensional; o primeiro ponto não pode ser o mesmo que o terceiro ponto. Se todos os três pontos de um segmento de arco circular forem collinear, o segmento de arco será tratado como um segmento de linha.
Importante
Para obter uma descrição detalhada e exemplos dos novos recursos espaciais introduzidos no SQL Server 2012, incluindo o CircularString subtipo, baixe o white paper, Novos Recursos Espaciais no SQL Server 2012.
Instâncias de CircularString
O desenho a seguir mostra exemplos válidos CircularString :
Instâncias aceitas
Uma CircularString instância será aceita se estiver vazia ou contiver um número ímpar de pontos, n, em que n > 1. As seguintes instâncias CircularString são aceitas.
DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 2 0, 1 1)';
@g3 mostra que a CircularString instância pode ser aceita, mas não é válida. A declaração de instância circularString a seguir não é aceita. Esta declaração lança um System.FormatException.
DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';
Instâncias válidas
Uma instância válida CircularString deve estar vazia ou ter os seguintes atributos:
Ele deve conter pelo menos um segmento de arco circular (ou seja, ter um mínimo de três pontos).
O último ponto de extremidade para cada segmento de arco circular na sequência, exceto para o último segmento, deve ser o primeiro ponto de extremidade para o próximo segmento na sequência.
Ele deve ter um número ímpar de pontos.
Ele não pode se sobrepor em um intervalo.
Embora as
CircularStringinstâncias possam conter segmentos de linha, esses segmentos de linha devem ser definidos por três pontos collineares.
O exemplo a seguir mostra instâncias CircularString válidas.
DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1, 0 1)';
DECLARE @g4 geometry = 'CIRCULARSTRING(1 1, 2 2, 2 2)';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(),@g4.STIsValid();
Uma CircularString instância deve conter pelo menos dois segmentos de arco circular para definir um círculo completo. Uma CircularString instância não pode usar um único segmento de arco circular (como (1 1, 3 1, 1 1)) para definir um círculo completo. Use (1 1, 2 2, 3 1, 2 0, 1 1) para definir o círculo.
O exemplo a seguir mostra instâncias CircularString que não são válidas.
DECLARE @g1 geometry = 'CIRCULARSTRING(1 1, 2 0, 1 1)';
DECLARE @g2 geometry = 'CIRCULARSTRING(0 0, 0 0, 0 0)';
SELECT @g1.STIsValid(), @g2.STIsValid();
Instâncias com pontos colineares
Nos casos a seguir, um segmento de arco circular será tratado como um segmento de linha:
Quando os três pontos são colineares (por exemplo, (1 3, 4 4, 7 5)).
Quando o primeiro ponto e o meio são iguais, mas o terceiro ponto é diferente (por exemplo, (1 3, 1 3, 7 5)).
Quando o meio e o último ponto são iguais, mas o primeiro ponto é diferente (por exemplo, (1 3, 4 4, 4 4)).
Exemplos
Um. Instanciando uma instância de geometria com um CircularString vazio
Este exemplo mostra como criar uma instância vazia CircularString :
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');
B. Instanciando uma instância de geometria usando um CircularString com um segmento de Arco Circular
O exemplo a seguir mostra como criar uma CircularString instância com um único segmento de arco circular (meio círculo):
DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();
C. Instanciando uma instância de geometria usando um CircularString com vários segmentos de arco circular
O exemplo a seguir mostra como criar uma CircularString instância com mais de um segmento de arco circular (círculo completo):
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1)');
SELECT 'Circumference = ' + CAST(@g.STLength() AS NVARCHAR(10));
Isso produz a seguinte saída:
Circumference = 6.28319
Compare a saída quando LineString for usada em vez de CircularString:
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(2 1, 1 2, 0 1, 1 0, 2 1)', 0);
SELECT 'Perimeter = ' + CAST(@g.STLength() AS NVARCHAR(10));
Isso produz a seguinte saída:
Perimeter = 5.65685
Observe que o valor do CircularString exemplo é próximo a 2π (2 * pi), que é a circunferência real do círculo.
D. Declarando e instanciando uma instância de geometria com um CircularString na mesma instrução
Este snippet mostra como declarar e instanciar uma geometry instância com uma CircularString na mesma instrução:
DECLARE @g geometry = 'CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)';
E. Instanciando uma instância de geografia com um CircularString
O exemplo a seguir mostra como declarar e instanciar uma geography instância com um CircularString:
DECLARE @g geography = 'CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';
F. Instanciando uma Instância Geométrica com um CircularString que é uma Linha Reta
O exemplo a seguir mostra como criar uma CircularString instância que é uma linha reta:
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);
Consulte Também
Visão geral dos tipos de dados espaciaisCompoundCurveMakeValid (tipo de dados geography)MakeValid (tipo de dados geometry)STIsValid (tipo de dados geometry)STIsValid (tipo de dados geography)STLength (tipo de dados geometry)STStartPoint (tipo de dados geometry)STEndpoint (tipo de dados geometry)STPointN (tipo de dados geometry)STNumPoints (tipo de dados geometry)STIsRing (tipo de dados geometry)STIsClosed (geometry Tipo de dados)STPointOnSurface (tipo de dados geometry)LineString