CircularString

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Ein CircularString ist eine Auflistung von 0 (null) oder mehr stetigen Kreisbogensegmenten. Ein Kreisbogensegment ist ein von drei Punkten in einer zweidimensionalen Ebene definierter gekrümmter Abschnitt; der erste Punkt darf nicht mit dem dritten Punkt identisch sein. Wenn alle drei Punkte eines Kreisbogensegments kollinear sind, wird das Bogensegment als Liniensegment behandelt.

CircularString-Instanzen

In der unten stehenden Zeichnung sind gültige CircularString -Instanzen dargestellt:

CircularString examples

Akzeptierte Instanzen

Eine CircularString-Instanz wird akzeptiert, wenn sie entweder leer ist oder eine ungerade Anzahl von Punkten enthält, n, wobei n > 1. Die folgenden CircularString -Instanzen werden akzeptiert.

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 zeigt, dass eine CircularString -Instanz zwar akzeptiert werden kann, möglicherweise jedoch nicht gültig ist. Die folgende Deklaration einer CircularString-Instanz wird nicht akzeptiert. Diese Deklaration löst eine System.FormatExceptionaus.

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

Gültige Instanzen

Eine gültige CircularString -Instanz muss leer sein oder über die folgenden Attribute verfügen:

  • Sie muss mindestens ein Kreisbogensegment enthalten (d. h., sie muss mindestens über drei Punkte verfügen).
  • Der letzte Endpunkt für jedes Kreisbogensegment in der Sequenz (mit Ausnahme des letzten Segments) muss dem ersten Endpunkt für das jeweils nächste Segment in der Sequenz entsprechen.
  • Sie muss eine ungerade Anzahl von Punkten aufweisen.
  • Sie darf sich über ein Intervalls nicht selbst überlappen.
  • CircularString -Instanzen können zwar Liniensegmente enthalten, diese Liniensegmente müssen jedoch durch drei kollineare Punkte definiert werden.

Im folgenden Beispiel werden gültige CircularString -Instanzen veranschaulicht.

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

Eine CircularString -Instanz muss mindestens zwei Kreisbogensegmente enthalten, damit ein vollständiger Kreis definiert wird. In einer CircularString -Instanz kann kein einzelnes Kreisbogensegment, z.B. (1 1, 3 1, 1 1), verwendet werden, um einen vollständigen Kreis zu definieren. Definieren Sie den Kreis mit (1 1, 2 2, 3 1, 2 0, 1 1).

Im folgenden Beispiel werden CircularString-Instanzen veranschaulicht, die nicht gültig sind.

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

Instanzen mit kollinearen Punkten

In den folgenden Fällen wird ein Kreisbogensegment als Liniensegment behandelt:

  • Wenn alle drei Punkte kollinear (z. B. 1 3, 4 4, 7 5) sind.
  • Wenn der erste und der mittlere Punkt identisch sind und sich beide vom dritten Punkt unterscheiden (z. B. 1 3, 1 3, 7 5).
  • Wenn der mittlere und der letzte Punkt identisch sind und sich beide vom ersten Punkt unterscheiden (z. B. 1 3, 4 4, 4 4).

Beispiele

A. Instanziieren einer Geometry-Instanz mit einem leeren CircularString

In diesem Beispiel wird veranschaulicht, wie eine leere CircularString -Instanz erstellt wird:

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

B. Instanziieren einer Geometry-Instanz, die einen CircularString mit einem Kreisbogensegment verwendet

Im folgenden Beispiel wird veranschaulicht, wie eine CircularString -Instanz mit einem einzelnen Kreisbogensegment (Halbkreis) erstellt wird:

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

C. Instanziieren einer Geometry-Instanz, die einen CircularString mit mehreren Kreisbogensegmenten verwendet

Im folgenden Beispiel wird veranschaulicht, wie eine CircularString -Instanz mit mehreren Kreisbogensegmenten (vollständiger Kreis) erstellt wird:

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

Hier ist das Resultset.

Circumference = 6.28319  

Vergleichen Sie die Ausgabe, wenn LineString anstelle von CircularStringverwendet wird:

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

Hier ist das Resultset.

Perimeter = 5.65685  

Beachten Sie, dass der Wert für das CircularString -Beispiel annähernd 2∏ beträgt (der tatsächliche Umfang des Kreises).

D. Deklarieren und Instanziieren einer Geometry-Instanz mit einem CircularString in derselben Anweisung

In diesem Codeausschnitt wird veranschaulicht, wie eine geometry -Instanz mit einem CircularString in derselben Anweisung deklariert und instanziiert wird:

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

E. Instanziieren einer Geography-Instanz mit einem CircularString

Im folgenden Beispiel wird veranschaulicht, wie eine geography -Instanz mit einem CircularStringdeklariert und instanziiert wird:

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. Instanziieren einer Geometry-Instanz mit einem CircularString, der eine Gerade darstellt

Im folgenden Beispiel wird veranschaulicht, wie eine CircularString -Instanz erstellt wird, die eine Gerade darstellt:

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

Weitere Informationen

Übersicht über räumliche Datentypen
CompoundCurve
MakeValid (geography-Datentyp)
MakeValid (geometry-Datentyp)
STIsValid (geometry-Datentyp)
STIsValid (geography-Datentyp)
STLength (geometry-Datentyp)
STStartPoint (geometry-Datentyp)
STEndpoint (geometry-Datentyp)
STPointN (geometry-Datentyp)
STNumPoints (geometry-Datentyp)
STIsRing (geometry-Datentyp)
STIsClosed (geometry-Datentyp)
STPointOnSurface (geometry-Datentyp)
LineString