CircularString
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance SQL Analysen-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric
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 an, dass die CircularString-Instanz akzeptiert, aber 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.
- Obwohl CircularString-Instanzen Liniensegmente enthalten können, müssen diese Liniensegmente durch drei spaltenförmige 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 Geometrieinstanz mit einer leeren Zirkelzeichenfolge
In diesem Beispiel wird veranschaulicht, wie eine leere CircularString -Instanz erstellt wird:
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');
B. Instanziieren einer Geometrieinstanz mithilfe einer Zirkelzeichenfolge mit einem Kreisbogensegment
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 Geometrieinstanz mithilfe einer Zirkelzeichenfolge mit mehreren Kreisbogensegmenten
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
Der Wert für das CircularString-Beispiel ist nahe 2∏, bei dem es sich um den tatsächlichen Umfang des Kreises handelt.
D: Deklarieren und Instanziieren einer Geometrieinstanz 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 Geografieinstanz mit einer 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 Geometrieinstanz mit einer Zirkelzeichenfolge, die eine gerade Linie ist
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);
Zugehöriger Inhalt
- Ü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