Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-Analyseendpunkt in Microsoft Fabric
Lagerhaus in Microsoft Fabric
SQL-Datenbank 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.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.
- 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).
Examples
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);
Verwandte Inhalte
- Ü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