Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un CircularString è una raccolta di segmenti di arco circolare continuo, che possono essere zero o più. Un segmento di arco circolare è un segmento curvo definito da tre punti in un piano bidimensionale; il primo punto non può essere uguale al terzo punto. Se tutti e tre i punti di un segmento di arco circolare sono collineari, il segmento di arco viene considerato come un segmento di linea.
Importante
Per una descrizione dettagliata ed esempi delle nuove funzionalità spaziali introdotte in SQL Server 2012, incluso il CircularString sottotipo, scaricare il white paper New Spatial Features in SQL Server 2012.
Istanze di *CircularString*
Il disegno seguente mostra le istanze valide CircularString :
Istanze accettate
Un'istanza CircularString viene accettata se è vuota o contiene un numero dispari di punti, n, dove n > 1. Vengono accettate le istanze seguenti 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 indica che CircularString l'istanza può essere accettata, ma non valida. La dichiarazione di istanza CircularString seguente non è accettata. Questa dichiarazione genera un'eccezione System.FormatException.
DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';
Istanze valide
Un'istanza valida CircularString deve essere vuota o avere gli attributi seguenti:
Deve contenere almeno un segmento di arco circolare (ovvero avere almeno tre punti).
L'ultimo endpoint per ogni segmento di arco circolare nella sequenza, ad eccezione dell'ultimo segmento, deve essere il primo endpoint per il segmento successivo nella sequenza.
Deve avere un numero dispari di punti.
Non può sovrapporsi su se stesso su un intervallo.
Anche se
CircularStringle istanze possono contenere segmenti di linea, questi segmenti di linea devono essere definiti da tre punti collineari.
Nell'esempio seguente vengono illustrate istanze valide 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();
Un'istanza CircularString deve contenere almeno due segmenti di arco circolare per definire un cerchio completo. 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. Usare (1 1, 2 2, 3 1, 2 0, 1 1) per definire il cerchio.
L'esempio seguente mostra le istanze CircularString non valide.
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 collineari
Nei casi seguenti un segmento di arco circolare verrà considerato come un segmento di linea:
Quando tutti e tre i punti sono collineari (ad esempio, (1 3, 4 4, 7 5)).
Quando il primo e il punto centrale sono uguali, ma il terzo punto è diverso (ad esempio, (1 3, 1 3, 7 5)).
Quando il centro e l'ultimo punto sono uguali, ma il primo punto è diverso (ad esempio, (1 3, 4 4, 4 4)).
Esempi
A. Creazione di un'istanza Geometry con un oggetto CircularString vuoto
Questo esempio illustra come creare un'istanza vuota CircularString :
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');
B. Creazione di un'istanza di geometria tramite CircularString con un singolo segmento di arco circolare
Nell'esempio seguente viene illustrato come creare un'istanza CircularString con un singolo segmento di arco circolare (cerchio a metà):
DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();
C. Creazione di un'istanza di geometria utilizzando un CircularString con più archi circolari
Nell'esempio seguente viene illustrato come creare un'istanza CircularString con più segmenti di arco circolare (cerchio 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));
In questo modo viene generato l'output seguente:
Circumference = 6.28319
Confrontare l'output quando LineString viene usato invece di 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));
In questo modo viene generato l'output seguente:
Perimeter = 5.65685
Si noti che il valore dell'esempio CircularString è vicino a 2π (2 * pi), ovvero la circonferenza effettiva del cerchio.
D. Dichiarazione e istanziazione di un'istanza di Geometry con CircularString nella stessa istruzione
Questo frammento di codice illustra come dichiarare e creare un'istanza di geometry utilizzando un CircularString nella stessa istruzione.
DECLARE @g geometry = 'CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)';
E. Creazione di un'istanza Geography con CircularString
Nell'esempio seguente viene illustrato come dichiarare e creare un'istanza di geography con un 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. Creazione di un'istanza Geometry con un elemento CircularString che è una linea retta
L'esempio seguente illustra come creare un'istanza CircularString di una linea retta:
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);
Vedere anche
Panoramica dei tipi di dati spazialiCompoundCurveMakeValid (tipo di dati geography)MakeValid (tipo di dati geometry)STIsValid (tipo di dati geometry)STIsValid (tipo di dati geography)STLength (tipo di dati geometry)STStartPoint (tipo di dati geometry)STEndpoint (tipo di dati geometry)STPointN (tipo di dati geometry)STNumPoints (tipo di dati geometry)STIsRing (tipo di dati geometry)STIsClosed (tipo di dati geometry)STPointOnSurface (tipo di dati geometry)LineString