CircularString

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.

Nota importanteImportante

Para obtener una descripción detallada y ejemplos de las nuevas características espaciales de esta versión, incluido el subtipo CircularString, descargue las notas del producto Nuevas características espaciales de SQL Server 2012.

Instancias de CircularString

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

5ff17e34-b578-4873-9d33-79500940d0bc

Instancias aceptadas

Una instancia de 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 la instancia de CircularString se puede aceptar, pero no es 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, dichos segmentos deben estar definidos por tres puntos colineales.

El siguiente ejemplo muestra 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. Una instancia de CircularString no puede utilizar solo un segmento de arco circular, por ejemplo (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.Crear 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.Crear instancias de una instancia de geometry usando una CircularString con un segmento de arco circular

En el siguiente ejemplo se muestra cómo crear una instancia de 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.Crear instancias de una instancia de geometry usando una CircularString con varios segmentos de arco circular

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

Produce el siguiente resultado:

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

Produce el siguiente resultado:

Perimeter = 5.65685

Observe que el valor del ejemplo CircularString se acerca a 2∏, que es la circunferencia real del círculo.

D.Declarar y crear instancias de una instancia de geometry con una 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.Crear instancias de una instancia de geography con una 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.Crear 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);

Vea también

Referencia

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)

Conceptos

Información general de los tipos de datos espaciales

CompoundCurve

LineString