Freigeben über


CircularString

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric SQL-Datenbank in Microsoft Fabric SQL 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:

Diagramm des CircularString-Beispiels für räumliche Messungen.

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

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