CircularStringCircularString

CircularString è una raccolta di zero o più segmenti di arco circolare continui.A CircularString is a collection of zero or more continuous circular arc segments. Un segmento di arco circolare è un segmento curvo definito da tre punti su un piano bidimensionale. Il primo punto non può corrispondere al terzo punto.A circular arc segment is a curved segment defined by three points in a two-dimensional plane; the first point cannot be the same as the third point. Se tutti e tre i punti di un segmento di arco circolare sono collineari, il segmento di arco verrà gestito come un segmento di linea.If all three points of a circular arc segment are collinear, the arc segment is treated as a line segment.

Importante

Per una descrizione dettagliata ed esempi delle nuove funzionalità spaziali introdotte in SQL Server 2012SQL Server 2012, tra cui il sottotipo CircularString , scaricare il white paper relativo alle nuove funzionalità spaziali in SQL Server 2012.For a detailed description and examples of the new spatial features introduced in SQL Server 2012SQL Server 2012, including the CircularString subtype, download the white paper, New Spatial Features in SQL Server 2012.

Istanze CircularStringCircularString instances

Nel disegno seguente vengono illustrate le istanze CircularString valide:The drawing below shows valid CircularString instances:

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

Istanze accettateAccepted instances

Un'istanza CircularString viene accettata se è vuota o contiene un numero dispari di punti, n, dove n > 1.A CircularString instance is accepted if it is either empty or contains an odd number of points, n, where n > 1. Le istanze CircularString seguenti vengono accettate.The following CircularString instances are accepted.

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 mostra che l'istanza CircularString può essere accettata, ma non è valida.@g3 shows that CircularString instance may be accepted, but not valid. La dichiarazione dell'istanza CircularString seguente non viene accettata.The following CircularString instance declaration is not accepted. Questa dichiarazione genera un'eccezione System.FormatException.This declaration throws a System.FormatException.

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

Istanze valideValid instances

Un'istanza CircularString valida deve essere vuota o disporre degli attributi seguenti:A valid CircularString instance must be empty or have the following attributes:

  • Deve contenere almeno un segmento di arco circolare, cioè avere un minimo di tre punti.It must contain at least one circular arc segment (that is, have a minimum of three points).

  • L'ultimo endpoint per ogni segmento di arco circolare nella sequenza, a eccezione dell'ultimo segmento, deve essere il primo endpoint per il segmento successivo nella sequenza.The last endpoint for each circular arc segment in the sequence, except for the last segment, must be the first endpoint for the next segment in the sequence.

  • Deve contenere un numero di punti dispari.It must have an odd number of points.

  • Non deve sovrapporsi a un intervallo.It cannot overlap itself over an interval.

  • Anche se è possibile che le istanze CircularString contengano segmenti di linea, questi ultimi devono essere definiti da tre punti collineari.Although CircularString instances may contain line segments, these line segments must be defined by three collinear points.

    Nell'esempio seguente vengono illustrate le istanze CircularString valide.The following example shows valid CircularString instances.

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

Un'istanza CircularString deve contenere almeno due segmenti di arco circolare per definire un cerchio completo.A CircularString instance must contain at least two circular arc segments to define a complete circle. Un'istanza CircularString non può usare un singolo segmento di arco circolare, ad esempio (1 1, 3 1, 1 1), per definire un cerchio completo.A CircularString instance cannot use a single circular arc segment (such as (1 1, 3 1, 1 1)) to define a complete circle. Utilizzare (1 1, 2 2, 3 1, 2 0, 1 1) per definire il cerchio.Use (1 1, 2 2, 3 1, 2 0, 1 1) to define the circle.

Nell'esempio seguente vengono illustrate le istanze CircularString non valide.The following example shows CircularString instances that are not valid.

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

Istanze con punti collineariInstances with collinear points

Nei casi seguenti un segmento di arco circolare sarà considerato come un segmento di linea:In the following cases a circular arc segment will be treated as a line segment:

  • Quando tutti e i tre punti sono collineari, ad esempio, (1 3, 4 4, 7 5).When all three points are collinear (for example, (1 3, 4 4, 7 5)).

  • Quando il primo punto e il punto medio sono gli stessi, ma il terzo punto è diverso, ad esempio, (1 3, 1 3, 7 5).When the first and middle point are the same, but the third point is different (for example, (1 3, 1 3, 7 5)).

  • Quando il punto medio e l'ultimo punto sono gli stessi, ma il primo punto è diverso, ad esempio, (1 3, 4 4, 4 4).When the middle and last point are the same, but the first point is different (for example, (1 3, 4 4, 4 4)).

EsempiExamples

A.A. Creazione di un'istanza Geometry con un'istanza CircularString vuotaInstantiating a Geometry Instance with an Empty CircularString

In questo esempio viene illustrato come creare un'istanza CircularString vuota:This example shows how to create an empty CircularString instance:

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

B.B. Creazione di un'istanza Geometry utilizzando un'istanza CircularString con un segmento di arco circolareInstantiating a Geometry Instance Using a CircularString with One Circular Arc Segment

L'esempio seguente mostra come creare un'istanza CircularString con un singolo segmento di arco circolare (mezzo cerchio):The following example shows how to create a CircularString instance with a single circular arc segment (half-circle):

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

C.C. Creazione di un'istanza Geometry utilizzando un'istanza CircularString con più segmenti di arco circolareInstantiating a Geometry Instance Using a CircularString with Multiple Circular Arc Segments

L'esempio seguente mostra come creare un'istanza CircularString con più segmenti di arco circolare (cerchio completo):The following example shows how to create a CircularString instance with more than one circular arc segment (full circle):

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

Viene prodotto l'output seguente:This produces the following output:

Circumference = 6.28319  

Confrontare l'output quando viene utilizzata LineString anziché CircularString:Compare the output when LineString is used instead of 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));  

Viene prodotto l'output seguente:This produces the following output:

Perimeter = 5.65685  

Si noti che il valore per l'esempio CircularString è vicino a 2∏, che è la circonferenza effettiva del cerchio.Notice that the value for the CircularString example is close to 2∏, which is the actual circumference of the circle.

D.D. Dichiarazione e creazione di un'istanza Geometry utilizzando un'istanza CircularString nella stessa istruzioneDeclaring and Instantiating a Geometry Instance with a CircularString in the Same Statement

In questo frammento viene illustrato come dichiarare e creare un'istanza geometry con un'istanza CircularString nella stessa istruzione:This snippet shows how to declare and instantiate a geometry instance with a CircularString in the same statement:

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

E.E. Creazione di un'istanza Geometry con un'istanza CircularStringInstantiating a Geography Instance with a CircularString

Nell'esempio seguente viene illustrato come dichiarare e creare un'istanza geography con un'istanza CircularString:The following example shows how to declare and instantiate a geography instance with a 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.F. Creazione di un'istanza Geometry con un'istanza CircularString che corrisponde a una linea rettaInstantiating a Geometry Instance with a CircularString that is a Straight Line

Nell'esempio seguente viene illustrato come creare un'istanza CircularString che corrisponde a una linea retta:The following example shows how to create a CircularString instance that is a straight line:

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

Vedere ancheSee Also

Panoramica dei tipi di dati spaziali Spatial Data Types Overview
CompoundCurve CompoundCurve
MakeValid (tipo di dati geography) MakeValid (geography Data Type)
MakeValid (tipo di dati geometry) MakeValid (geometry Data Type)
STIsValid (tipo di dati geometry) STIsValid (geometry Data Type)
STIsValid (tipo di dati geography) STIsValid (geography 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)
STPointN (tipo di dati geometry) STPointN (geometry Data Type)
STNumPoints (geometry Data Type) (STNumPoints (tipo di dati geometry)) STNumPoints (geometry Data Type)
STIsRing (tipo di dati geometry) STIsRing (geometry Data Type)
STIsClosed (tipo di dati geometry) STIsClosed (geometry Data Type)
STPointOnSurface (tipo di dati geometry) STPointOnSurface (geometry Data Type)
LineString LineString