Compartir a través de


CircularString

Se aplica a: Sql Server Azure SQL Database Azure SQL Instancia administrada punto de conexión de SQL Analytics en Microsoft Fabric Warehouse en la base de datos SQL de Microsoft Fabric en Microsoft Fabric

Una CircularString es una colección con cero o más segmentos de arco circular continuos. Un segmento de arco circular es un segmento curvado definido por tres puntos en un plano bidimensional; el primer punto no puede ser igual que el tercero. Si los tres puntos de un segmento de arco circular son colineales, el segmento de arco se trata como un segmento de línea.

Instancias de CircularString

En el dibujo siguiente se muestran instancias válidas de CircularString :

Diagrama de medidas espaciales de ejemplo de CircularString.

Instancias aceptadas

La instancia CircularString se acepta si está vacía o contiene un número impar de puntos, n, donde n > 1. Se aceptan las siguientes instancias de CircularString .

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 muestra que se puede aceptar la instancia de CircularString , pero no válida. La siguiente declaración de instancia de CircularString no se acepta. Esta declaración inicia una excepción System.FormatException.

DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';  

Instancias válidas

Una instancia de CircularString válida debe estar vacía o tener los siguientes atributos:

  • Debe contener al menos un segmento de arco circular (es decir, con un mínimo de tres puntos).
  • El último extremo de cada segmento de arco circular de la secuencia, salvo el último segmento, debe ser el primer extremo del siguiente segmento de la secuencia.
  • Debe tener un número impar de puntos.
  • No se puede superponer sobre un intervalo.
  • Aunque las instancias de CircularString pueden contener segmentos de línea, estos segmentos de línea deben definirse mediante tres puntos collineales.

En el siguiente ejemplo se muestran instancias válidas de CircularString .

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

Una instancia de CircularString debe contener al menos dos segmentos de arco circular para definir un círculo completo. La instancia CircularString no puede usar solo un segmento de arco circular, como (1 1, 3 1, 1 1), para definir un círculo completo. Utilice (1 1, 2 2, 3 1, 2 0, 1 1) para definir el círculo.

En el siguiente ejemplo se muestran instancias de CircularString no 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();  

Instancias con puntos colineales

En los siguientes casos, un segmento de arco circular se tratará como un segmento de línea:

  • Cuando los tres puntos son colineales, por ejemplo (1 3, 4 4, 7 5).
  • Cuando los puntos primero y medio son el mismo, pero el tercer punto es diferente, por ejemplo (1 3, 1 3, 7 5).
  • Cuando los puntos medio y último son el mismo, pero el primer punto es diferente, por ejemplo (1 3, 4 4, 4 4).

Ejemplos

A Creación de instancias de una instancia de Geometry con una circularString vacía

En este ejemplo se muestra cómo crear una instancia de CircularString vacía:

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

B. Creación de instancias de una instancia de Geometry mediante una circularString con un segmento de arco circular

En el siguiente ejemplo se muestra cómo crear una instancia CircularString con un único segmento de arco de circular (medio círculo):

DECLARE @g geometry;  
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);  
SELECT @g.ToString();  

C. Creación de instancias de una instancia de Geometry mediante circularString con varios segmentos de arco circular

En el siguiente ejemplo se muestra cómo crear una instancia CircularString con más de un segmento de arco de 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));    

Este es el conjunto de resultados.

Circumference = 6.28319  

Compare con el resultado obtenido cuando se utiliza LineString en lugar 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));  

Este es el conjunto de resultados.

Perimeter = 5.65685  

El valor del ejemplo circularString está cerca de 2∏, que es la circunferencia real del círculo.

D. Declarar e crear instancias de una instancia de Geometry con circularString en la misma instrucción

Este fragmento de código muestra cómo declarar y crear instancias de una instancia de geometry con una CircularString en la misma instrucción:

DECLARE @g geometry = 'CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)';  

E. Creación de instancias de una instancia de Geography con circularString

En el siguiente ejemplo, se muestra cómo declarar y crear una instancia de geography con una 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. Creación de instancias de una instancia de Geometry con una circularString que es una línea recta

En el siguiente ejemplo se muestra cómo crear una instancia de CircularString que es una línea recta:

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);