CircularString
Gilt für: SQL Server Azure SQL-Datenbank Azure 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:
Akzeptierte Instanzen
Eine CircularString-Instanz wird akzeptiert, wenn sie entweder leer ist oder eine ungerade Anzahl von Punkten n enthält, wobei n > 1 gilt. 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.FormatException
aus.
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 sehen Sie das Ergebnis.
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 sehen Sie das Ergebnis.
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