CompoundCurveCompoundCurve

CompoundCurve è una raccolta di zero o più istanze CircularString o LineString continue di tipo geometry o geography.A CompoundCurve is a collection of zero or more continuous CircularString or LineString instances of either geometry or geography types.

Importante

Per una descrizione dettagliata ed esempi delle nuove funzionalità spaziali di questa versione, compreso il sottotipo CompoundCurve , scaricare il white paper New Spatial Features in SQL Server 2012(Nuove funzionalità spaziali in SQL Server 2012).For a detailed description and examples of the new spatial features in this release, including the CompoundCurve subtype, download the white paper, New Spatial Features in SQL Server 2012.

È possibile creare un'istanza CompoundCurve vuota, ma, perché CompoundCurve sia valida, è necessario che vengano rispettati i criteri seguenti:An empty CompoundCurve instance can be instantiated, but for a CompoundCurve to be valid it must meet the following criteria:

  1. Deve contenere almeno un'istanza CircularString o LineString .It must contain at least one CircularString or LineString instance.

  2. La sequenza di istanze CircularString o LineString deve essere continua.The sequence of CircularString or LineString instances must be continuous.

    Se un'istanza CompoundCurve contiene una sequenza di più istanze CircularString e LineString , l'endpoint finale per ogni istanza, a eccezione dell'ultima, deve essere l'endpoint iniziale dell'istanza successiva nella sequenza.If a CompoundCurve contains a sequence of multiple CircularString and LineString instances, the ending endpoint for every instance except for the last instance must be the starting endpoint for the next instance in the sequence. Ciò significa che se il punto finale di un'istanza precedente nella sequenza è (4 3 7 2), il punto iniziale dell'istanza successiva nella sequenza deve essere (4 3 7 2).This means that if the ending point of a prior instance in the sequence is (4 3 7 2), the starting point for the next instance in the sequence must be (4 3 7 2). Si noti che i valori Z (elevazione) e M (misura) del punto devono essere anch'essi uguali.Note that Z(elevation) and M(measure) values for the point must also be the same. Nel caso di una differenza nei due punti, viene generata un'eccezione System.FormatException .If there is a difference in the two points, a System.FormatException is thrown. I punti in un'istanza CircularString non devono avere un valore Z o M.Points in a CircularString do not have to have a Z or M value. Se non sono presenti valori Z o M per il punto finale dell'istanza precedente, il punto iniziale dell'istanza successiva non potrà includere valori Z o M.If no Z or M values are given for the ending point of the prior instance, the starting point of the next instance cannot include Z or M values. Se il punto finale della sequenza precedente è (4 3), il punto iniziale della sequenza successiva dovrà essere (4 3). Non potrà essere (4 3 7 2).If the ending point for the prior sequence is (4 3), the starting point for the next sequence must be (4 3); it cannot be (4 3 7 2). Tutti i punti in un'istanza CompoundCurve non devono avere alcun valore Z oppure devono avere lo stesso valore Z.All points in a CompoundCurve instance must have either no Z value or the same Z value.

Istanze CompoundCurveCompoundCurve instances

La figura seguente illustra i tipi di CompoundCurve validi.The following illustration shows valid CompoundCurve types.

f278742e-b861-4555-8b51-3d972b7602bf

Istanze accettateAccepted instances

L'istanzaCompoundCurve viene accettata se è un'istanza vuota o se soddisfa i criteri seguenti.CompoundCurve instance is accepted if it is an empty instance or meets the following criteria.

  1. Tutte le istanze contenute nell'istanza CompoundCurve sono istanze di segmenti di arco circolare accettate.All the instances contained by CompoundCurve instance are accepted circular arc segment instances. Per altre informazioni sulle istanze di segmenti di arco circolare accettate, vedere LineString e CircularString.For more information on accepted circular arc segment instances, see LineString and CircularString.

  2. Tutti i segmenti di arco circolare nell'istanza CompoundCurve sono connessi.All of the circular arc segments in the CompoundCurve instance are connected. Il primo punto di ogni segmento di arco circolare successivo è uguale all'ultimo punto del segmento di arco circolare precedente.The first point for each succeeding circular arc segment is the same as the last point on the preceeding circular arc segment.

    Nota

    Sono incluse le coordinate Z e M.This includes the Z and M coordinates. È quindi necessario che tutte e quattro le coordinate X, Y, Z e M siano uguali.So, all four coordinates X, Y, Z, and M must be the same.

  3. Nessuna delle istanze contenute è un'istanza vuota.None of the contained instances are empty instances.

    L'esempio seguente illustra le istanze CompoundCurve accettate.The following example shows accepted CompoundCurve instances.

DECLARE @g1 geometry = 'COMPOUNDCURVE EMPTY';  
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (-1 0, 2 0))';  

L'esempio seguente illustra le istanze CompoundCurve non accettate.The following example shows CompoundCurve instances that are not accepted. Queste istanze generano un'eccezione System.FormatException.These instances throw System.FormatException.

DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING EMPTY)';  
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (1 0, 2 0))';  

Istanze valideValid instances

Un'istanza CompoundCurve è valida se soddisfa i criteri seguenti.A CompoundCurve instance is valid if it meets the following criteria.

  1. L'istanza CompoundCurve è stata accettata.The CompoundCurve instance is accepted.

  2. Tutte le istanze di segmenti di arco circolare contenute nell'istanza CompoundCurve sono istanze valide.All circular arc segment instances contained by the CompoundCurve instance are valid instances.

    L'esempio seguente illustra le istanze CompoundCurve valide.The following example shows valid CompoundCurve instances.

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 è valida perché l'istanza CircularString è valida.@g3 is valid because the CircularString instance is valid. Per altre informazioni sulla validità dell'istanza CircularString , vedere CircularString.For more information on the validity of the CircularString instance, see CircularString.

L'esempio seguente illustra le istanze CompoundCurve non valide.The following example shows CompoundCurve instances that are not valid.

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 non è valida perché la seconda istanza non è un'istanza LineString valida.@g1 is not valid because the second instance is not a valid LineString instance. @g2 non è valida perché l'istanza LineString non è valida.@g2 is not valid because the LineString instance is not valid. @g3 non è valida perché l'istanza CircularString non è valida.@g3 is not valid because the CircularString instance is not valid. Per altre informazioni sulle istanze CircularString e LineString valide, vedere CircularString e LineString.For more information on valid CircularString and LineString instances, see CircularString and LineString.

EsempiExamples

A.A. Creazione di un'istanza Geometry con un'istanza CompoundCurve vuotaInstantiating a geometry instance with an empty CompooundCurve

Nell'esempio seguente viene illustrato come creare un'istanza CompoundCurve vuota:The following example shows how to create an empty CompoundCurve instance:

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

B.B. Dichiarazione e creazione di un'istanza Geometry utilizzando un'istanza CompoundCurve nella stessa istruzioneDeclaring and instantiating a geometry instance using a CompoundCurve in the same statement

L'esempio seguente illustra come dichiarare e inizializzare un'istanza geometry con un'istanza CompoundCurvenella stessa istruzione:The following example shows how to declare and initialize a geometry instance with a CompoundCurvein the same statement:

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.C. Creazione di un'istanza Geography con un'istanza CompoundCurveInstantiating a geography instance with a CompoundCurve

L'esempio seguente illustra come dichiarare e inizializzare un'istanza geography con un'istanza CompoundCurve:The following example shows how to declare and initialize a geography instance with a 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.D. Archiviazione di un quadrato in un'istanza CompoundCurveStoring a square in a CompoundCurve instance

Nell'esempio seguente vengono utilizzate due diverse modalità per archiviare un quadrato tramite un'istanza CompoundCurve .The following example uses two different ways to use a CompoundCurve instance to store a square.

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

Le lunghezze per @g1 e @g2 sono le stesse.The lengths for both @g1 and @g2 are the same. Come illustrato nell'esempio, un'istanza CompoundCurve può archiviare una o più istanze LineString.Notice from the example that a CompoundCurve instance can store one or more instances of LineString.

E.E. Creazione di un'istanza Geometry utilizzando un'istanza CompoundCurve con più istanze CircularStringInstantiating a geometry instance using a CompoundCurve with multiple CircularStrings

Nell'esempio seguente viene illustrato come utilizzare due diverse istanze CircularString per creare un'istanza CompoundCurve:The following example shows how to use two different CircularString instances to initialize a 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();  

Viene prodotto l'output seguente:12.566370…This produces the following output: 12.566370… equivalente a 4∏.which is the equivalent of 4∏. L'istanza CompoundCurve riportata nell'esempio consente di archiviare un cerchio con un raggio di 2.The CompoundCurve instance in the example stores a circle with a radius of 2. In entrambi gli esempi di codice precedenti non è stato necessario utilizzare un'istanza CompoundCurve.Both of the previous code examples did not have to use a CompoundCurve. Per il primo esempio sarebbe stata più semplice un'istanza LineString , mentre per il secondo esempio sarebbe stata più semplice un'istanza CircularString .For the first example a LineString instance would have been simpler, and a CircularString instance would have been simpler for the second example. Nell'esempio successivo viene tuttavia illustrato in quale punto un'istanza CompoundCurve costituisce una migliore alternativa.However, the next example shows where a CompoundCurve provides a better alternative.

F.F. Utilizzo di un'istanza CompoundCurve per archiviare un semicerchioUsing a CompoundCurve to store a semicircle

Nell'esempio seguente viene utilizzata un'istanza CompoundCurve per archiviare un semicerchio.The following example uses a CompoundCurve instance to store a semicircle.

DECLARE @g geometry;  
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 0 2))');  
SELECT @g.STLength();  

G.G. Archiviazione di più istanze CircularString e LineString in un'istanza CompoundCurveStoring multiple CircularString and LineString instances in a CompoundCurve

Nell'esempio seguente viene illustrato come è possibile archiviare più istanze CircularString e LineString tramite un'istanza CompoundCurve.The following example shows how multiple CircularString and LineString instances can be stored by using a 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.H. Archiviazione di istanze con valori Z e MStoring instances with Z and M values

Nell'esempio seguente viene illustrato come utilizzare un'istanza CompoundCurve per archiviare una sequenza di istanze CircularString e LineString con valori Z e M.The following example shows how to use a CompoundCurve instance to store a sequence of CircularString and LineString instances with both Z and M values.

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.I. Descrizione del motivo per cui le istanze CircularString devono essere dichiarate in modo esplicitoIllustrating why CircularString instances must be explicitly declared

Nell'esempio seguente viene illustrato il motivo per cui è necessario dichiarare in modo esplicito le istanze CircularString .The following example shows why CircularString instances must be explicitly declared. Il programmatore sta tentando di archiviare un cerchio in un'istanza CompoundCurve .The programmer is trying to store a circle in a CompoundCurve instance.

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  

L'output è il seguente:The output is as follows:

Circle One11.940039…  
Circle Two12.566370…  

Il perimetro di Circle Two è approssimativamente 4∏, che corrisponde al valore effettivo per il perimetro.The perimeter for Circle Two is approximately 4∏, which is the actual value for the perimeter. Il perimetro per Circle One, tuttavia, è significativamente impreciso.However, the perimeter for Circle One is significantly inaccurate. L'istanza CompoundCurve di Circle One consente l'archiviazione di un segmento di arco circolare (ABC) e di due segmenti di linea (CD, DA).Circle One's CompoundCurve instance stores one circular arc segment (ABC) and two line segments (CD, DA). Tramite l'istanza CompoundCurve devono essere archiviati due segmenti di arco circolare (ABC, CDA) per definire un cerchio.The CompoundCurve instance has to store two circular arc segments (ABC, CDA) to define a circle. Tramite un'istanza LineString viene definito il secondo set di punti (4 2, 2 4, 0 2) nell'istanza CompoundCurve di Circle One.A LineString instance defines the second set of points (4 2, 2 4, 0 2) in Circle One's CompoundCurve instance. È necessario dichiarare in modo esplicito un'istanza CircularString in un'istanza CompoundCurve.You have to explicitly declare a CircularString instance inside a CompoundCurve.

Vedere ancheSee Also

STIsValid (tipo di dati geometry) STIsValid (geometry Data Type)
STLength (tipo di dati geometry) STLength (geometry Data Type)
STStartPoint (tipo di dati geometry) STStartPoint (geometry Data Type)
STEndpoint (tipo di dati geometry) STEndpoint (geometry Data Type)
LineString LineString
CircularString CircularString
Panoramica dei tipi di dati spaziali Spatial Data Types Overview
Punto Point