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 :
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);
Contenido relacionado
- Información general de los tipos de datos espaciales
- CompoundCurve
- MakeValid (tipo de datos geography)
- MakeValid (tipo de datos geometry)
- STIsValid (tipo de datos geometry)
- STIsValid (tipo de datos geography)
- STLength (tipo de datos geometry)
- STStartPoint (tipo de datos geometry)
- STEndpoint (tipo de datos geometry)
- STPointN (tipo de datos geometry)
- STNumPoints (tipo de datos geometry)
- STIsRing (tipo de datos geometry)
- STIsClosed (tipo de datos geometry)
- STPointOnSurface (tipo de datos geometry)
- LineString