Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
es-ES: CompoundCurve
es una colección de cero o más instancias continuas de tipos de geometría o geografía CircularString
o LineString
.
Importante
Para obtener una descripción detallada y ejemplos de las nuevas características espaciales de esta versión, incluido el CompoundCurve
subtipo, descargue el documento técnico titulado Nuevas características espaciales en SQL Server 2012.
Se puede crear una instancia vacía CompoundCurve
, pero para CompoundCurve
que sea válido, debe cumplir los criterios siguientes:
Debe contener al menos una instancia de
CircularString
o una deLineString
.La secuencia de instancias de
CircularString
oLineString
debe ser continua.
Si un CompoundCurve
contiene una secuencia de varias instancias de CircularString
y LineString
, el punto final de cada instancia excepto la última instancia debe ser el punto de inicio para la siguiente instancia de la secuencia. Esto significa que si el punto final de una instancia anterior de la secuencia es (4 3 7 2), el punto inicial de la siguiente instancia de la secuencia debe ser (4 3 7 2). Tenga en cuenta que los valores Z(elevation) y M(measure) del punto también deben ser los mismos. Si hay una diferencia en los dos puntos, se lanza una System.FormatException
excepción. Los puntos de un CircularString
no tienen que tener un valor Z o M. Si no se proporcionan valores Z o M para el punto final de la instancia anterior, el punto inicial de la siguiente instancia no puede incluir valores Z o M. Si el punto final de la secuencia anterior es (4 3), el punto inicial de la siguiente secuencia debe ser (4 3); no puede ser (4 3 7 2). Todos los puntos de una instancia de CompoundCurve
deben tener o bien ningún valor Z o bien el mismo valor Z.
Instancias de curva compuesta
En la ilustración siguiente se muestran los tipos válidos CompoundCurve
.
Instancias aceptadas
CompoundCurve
Se acepta la instancia si es una instancia vacía o cumple el siguiente criterio.
Todas las instancias contenidas por
CompoundCurve
instancia son instancias de segmento de arco circular aceptadas. Para obtener más información sobre las instancias de segmento de arco circular aceptadas, consulte LineString y CircularString.Todos los segmentos de arco circular de la
CompoundCurve
instancia están conectados. El primer punto de cada segmento de arco circular sucesivo es el mismo que el último punto del segmento de arco circular precedente.Nota:
Esto incluye las coordenadas Z y M. Por lo tanto, las cuatro coordenadas X, Y, Z y M deben ser las mismas.
Ninguna de las instancias contenidas son instancias vacías.
En el ejemplo siguiente se muestran instancias aceptadas CompoundCurve
.
DECLARE @g1 geometry = 'COMPOUNDCURVE EMPTY';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (-1 0, 2 0))';
En el ejemplo siguiente se muestran CompoundCurve
instancias que no se aceptan. Estas instancias lanzan System.FormatException
.
DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING EMPTY)';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (1 0, 2 0))';
Instancias válidas
Una CompoundCurve
instancia es válida si cumple los siguientes criterios.
La
CompoundCurve
instancia se acepta.Todas las instancias de segmento de arco circular contenidas por la
CompoundCurve
instancia son instancias válidas.
En el ejemplo siguiente se muestran instancias válidas CompoundCurve
.
DECLARE @g1 geometry = 'COMPOUNDCURVE EMPTY';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (-1 0, 2 0))';
DECLARE @g3 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 1 1, 1 1), (1 1, 3 5, 5 4))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();
@g3
es válido porque la CircularString
instancia es válida. Para obtener más información sobre la validez de la CircularString
instancia, consulte CircularString.
En el ejemplo siguiente se muestran CompoundCurve
instancias que no son válidas.
DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 1 1, 1 1), (1 1, 3 5, 5 4, 3 5))';
DECLARE @g2 geometry = 'COMPOUNDCURVE((1 1, 1 1))';
DECLARE @g3 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 2 3, 1 1))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();
@g1
no es válido porque la segunda instancia no es una instancia de LineString válida.
@g2
no es válido porque la LineString
instancia no es válida.
@g3
no es válido porque la CircularString
instancia no es válida. Para obtener más información sobre instancias válidas de CircularString
y LineString
, consulte CircularString y LineString.
Ejemplos
A. Instanciando una instancia de geometría con CompoundCurve vacío
En el ejemplo siguiente se muestra cómo crear una instancia vacía CompoundCurve
:
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE EMPTY');
B. Declaración e instancia de una geometría usando CompoundCurve en la misma instrucción
En el ejemplo siguiente se muestra cómo declarar e inicializar una geometry
instancia con en CompoundCurve
la misma instrucción:
DECLARE @g geometry = 'COMPOUNDCURVE ((2 2, 0 0),CIRCULARSTRING (0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0))';
C. Creación de instancias de una instancia de geography con compoundCurve
En el ejemplo siguiente se muestra cómo declarar e inicializar una geography
instancia con :CompoundCurve
DECLARE @g geography = 'COMPOUNDCURVE(CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';
D. Almacenamiento de un cuadrado en una instancia de CompoundCurve
En el ejemplo siguiente se usan dos maneras diferentes de usar una CompoundCurve
instancia para almacenar un cuadrado.
DECLARE @g1 geometry, @g2 geometry;
SET @g1 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3), (1 3, 3 3),(3 3, 3 1), (3 1, 1 1))');
SET @g2 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3, 3 3, 3 1, 1 1))');
SELECT @g1.STLength(), @g2.STLength();
Las longitudes para @g1
y @g2
son las mismas. Observe en el ejemplo que una CompoundCurve
instancia puede almacenar una o varias instancias de LineString
.
E. Creación de una instancia de geometría usando una CompoundCurve con varias CircularStrings
En el ejemplo siguiente se muestra cómo usar dos instancias diferentes CircularString
para inicializar un CompoundCurve
.
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');
SELECT @g.STLength();
Esto genera la siguiente salida: 12.566370... que es el equivalente de 4π (4 * pi). La CompoundCurve
instancia del ejemplo almacena un círculo con un radio de 2. Ambos ejemplos de código anteriores no tenían que usar CompoundCurve
. En el primer ejemplo, una LineString
instancia habría sido más sencilla y una CircularString
instancia habría sido más sencilla para el segundo ejemplo. Sin embargo, en el ejemplo siguiente se muestra dónde CompoundCurve
proporciona una alternativa mejor.
F. Usar un CompoundCurve para almacenar un semicírculo
En el ejemplo siguiente se usa una CompoundCurve
instancia para almacenar un semicircular.
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 0 2))');
SELECT @g.STLength();
G. Almacenamiento de varias instancias de CircularString y LineString en compoundCurve
En el ejemplo siguiente se muestra cómo se pueden almacenar varias instancias de CircularString
y LineString
utilizando un CompoundCurve
.
DECLARE @g geometry
SET @g = geometry::Parse('COMPOUNDCURVE((3 5, 3 3), CIRCULARSTRING(3 3, 5 1, 7 3), (7 3, 7 5), CIRCULARSTRING(7 5, 5 7, 3 5))');
SELECT @g.STLength();
H. Almacenamiento de instancias con valores Z y M
En el ejemplo siguiente se muestra cómo usar una instancia `CompoundCurve
` para almacenar una secuencia de instancias `CircularString
` y `LineString
` con valores Z y M.
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(7 5 4 2, 5 7 4 2, 3 5 4 2), (3 5 4 2, 8 7 4 2))');
I. Ilustración del motivo por el que las instancias de CircularString deben declararse explícitamente
En el ejemplo siguiente se muestra por qué CircularString
las instancias deben declararse explícitamente. El programador está intentando almacenar un círculo en una CompoundCurve
instancia de .
DECLARE @g1 geometry;
DECLARE @g2 geometry;
SET @g1 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 2 4, 0 2))');
SELECT 'Circle One', @g1.STLength() AS Perimeter; -- gives an inaccurate amount
SET @g2 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');
SELECT 'Circle Two', @g2.STLength() AS Perimeter; -- now we get an accurate amount
La salida es la siguiente:
Circle One11.940039...
Circle Two12.566370...
El perímetro del círculo dos es aproximadamente 4π (4 * pi), que es el valor real del perímetro. Sin embargo, el perímetro de Circle One es significativamente inexacto. La instancia de CompoundCurve
Circle One almacena un segmento de arco circular (ABC) y dos segmentos de línea (CD, DA). La CompoundCurve
instancia tiene que almacenar dos segmentos de arco circular (ABC, CDA) para definir un círculo. Una LineString
instancia define el segundo conjunto de puntos (4 2, 2 4, 0 2) en la instancia CompoundCurve
de Circle One. Debe declarar explícitamente una instancia CircularString
dentro de un CompoundCurve
.
Véase también
STIsValid (tipo de datos geometry)STLength (tipo de datos geometry)STStartPoint (tipo de datos geometry)STEndpoint (tipo de datos geometry)LineStringCircularStringDescripción general de tipos de datos espacialesPunto