CurvePolygon

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

Ein CurvePolygon ist eine von einem äußeren Begrenzungsring und null oder mehr inneren Ringe definierte topologisch geschlossene Fläche.

Wichtig

Eine ausführliche Beschreibung und Beispiele für räumliche Features, die in SQL Server 2012 (11.x) eingeführt wurden, einschließlich des Untertyps CurvePolygon , laden Sie das Whitepaper " Neue räumliche Features" in SQL Server 2012 herunter.

Die Attribute einer CurvePolygon -Instanz werden durch folgende Kriterien definiert:

  • Die Begrenzung der CurvePolygon -Instanz wird durch den äußeren Ring und alle inneren Ringe definiert.

  • Das Innere der CurvePolygon -Instanz ist die Fläche zwischen dem äußeren Ring und allen inneren Ringen.

Eine CurvePolygon -Instanz unterscheidet sich von einer Polygon -Instanz darin, dass eine CurvePolygon -Instanz die folgenden Kreisbogensegmente enthalten kann: CircularString und CompoundCurve.

CompoundCurve-Instanzen

In der unten stehenden Abbildung werden gültige CurvePolygon -Instanzen dargestellt:

Akzeptierte Instanzen

Damit eine CurvePolygon -Instanz akzeptiert wird, muss sie entweder leer sein oder ausschließlich akzeptierte Kreisbogenringe enthalten. Ein akzeptierter Kreisbogenring erfüllt die folgenden Anforderungen.

  1. Er stellt eine akzeptierte LineString-, CircularString- oder CompoundCurve -Instanz dar. Weitere Informationen zu akzeptierten Instanzen finden Sie unter LineString, CircularStringund CompoundCurve.

  2. Er enthält mindestens vier Punkte.

  3. Die X- und Y-Koordinaten für den Ausgangspunkt und den Endpunkt sind identisch.

    Hinweis

    Z- und M-Werte werden ignoriert.

Im folgenden Beispiel werden akzeptierte CurvePolygon -Instanzen veranschaulicht.

DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';  
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0, 0 0))';  
DECLARE @g3 geometry = 'CURVEPOLYGON((0 0 1, 0 0 2, 0 0 3, 0 0 3))'  
DECLARE @g4 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';  
DECLARE @g5 geography = 'CURVEPOLYGON((-122.3 47, 122.3 -47, 125.7 -49, 121 -38, -122.3 47))';  

@g3 wird akzeptiert, obwohl sich die Z-Werte des Ausgangspunkts und des Endpunkts voneinander unterscheiden, da Z-Werte ignoriert werden. @g5 wird akzeptiert, obwohl die geography -Typinstanz ungültig ist.

In den folgenden Beispielen wird System.FormatExceptionausgelöst.

DECLARE @g1 geometry = 'CURVEPOLYGON((0 5, 0 0, 0 0, 0 0))';  
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0))';  

@g1 wird nicht akzeptiert, da der Ausgangspunkt und der Endpunkt nicht denselben Y-Wert aufweisen. @g2 wird nicht akzeptiert, da der Ring nicht über eine ausreichende Anzahl von Punkten verfügt.

Gültige Instanzen

Eine CurvePolygon -Instanz ist gültig, wenn sowohl der äußere Ring als auch die inneren Ringe die folgenden Kriterien erfüllen:

  1. Sie können sich nur an jeweils einem Tangentenpunkt berühren.
  2. Sie können einander nicht schneiden.
  3. Jeder Ring muss mindestens vier Punkte enthalten.
  4. Jeder Ring muss ein akzeptabler Kurventyp sein.

AuchCurvePolygon -Instanzen müssen bestimmte Kriterien erfüllen, je nachdem, ob es sich dabei um einen geometry -Datentyp oder einen geography -Datentyp handelt.

geometry-Datentyp

Eine gültige geometryCurvePolygon -Instanz muss über die folgenden Attribute verfügen:

  1. Alle inneren Ringe müssen im äußeren Ring enthalten sein.
  2. Mehrere innere Ringe können vorhanden sein, ein innerer Ring darf jedoch keinen anderen inneren Ring enthalten.
  3. Ringe dürfen weder sich selbst noch einen anderen Ring schneiden.
  4. Ringe dürfen sich nur an einzelnen Tangentenpunkten berühren (wobei die Anzahl der Punkte, an denen Ringe einander berühren, endlich sein muss).
  5. Der Innere des Polygons muss verbunden sein.

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

DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';  
DECLARE @g2 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';  
SELECT @g1.STIsValid(), @g2.STIsValid();  

Für CurvePolygon-Instanzen gelten dieselben Gültigkeitsregeln wie für Polygon-Instanzen. CurvePolygon-Instanzen können jedoch die neuen Kreisbogensegment-Typen akzeptieren. Weitere Beispiele für gültige oder nicht gültige Instanzen finden Sie unter Polygon.

geography-Datentyp

Eine gültige geographyCurvePolygon -Instanz muss über die folgenden Attribute verfügen:

  1. Der Innere des Polygons ist mit der linken Regel verbunden.
  2. Ringe dürfen weder sich selbst noch einen anderen Ring schneiden.
  3. Ringe dürfen sich nur an einzelnen Tangentenpunkten berühren (wobei die Anzahl der Punkte, an denen Ringe einander berühren, endlich sein muss).
  4. Der Innere des Polygons muss verbunden sein.

Im folgenden Beispiel wird eine gültige CurvePolygon-geography-Instanz veranschaulicht.

DECLARE @g geography = 'CURVEPOLYGON((-122.3 47, 122.3 47, 125.7 49, 121 38, -122.3 47))';  
SELECT @g.STIsValid();  

Beispiele

A. Instanziieren einer geometry-Instanz mit einem leeren CurvePolygon

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

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

B. Deklarieren und Instanziieren einer geometry-Instanz mit einem CurvePolygon in derselben Anweisung

In diesem Codeausschnitt wird veranschaulicht, wie eine geometry-Instanz und ein CurvePolygon in derselben Anweisung deklariert und initialisiert werden:

DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'  

C. Instanziieren einer geography-Instanz mit einem CurvePolygon

In diesem Codeausschnitt wird veranschaulicht, wie eine geography -Instanz mit einem CurvePolygondeklariert und initialisiert wird:

DECLARE @g geography = 'CURVEPOLYGON(CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';  

D. Speichern eines CurvePolygon mit nur einem äußeren Begrenzungsring

In diesem Beispiel wird veranschaulicht, wie ein einfacher Kreis in einer CurvePolygon -Instanz gespeichert wird (wobei der Kreis lediglich durch einen äußeren Begrenzungsring definiert wird):

DECLARE @g geometry;  
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');  
SELECT @g.STArea() AS Area;  

E. Speichern eines CurvePolygon mit inneren Ringen

In diesem Beispiel wird ein Rad in einer CurvePolygon -Instanz erstellt (das Rad wird durch einen äußeren Begrenzungsring und einen inneren Ring definiert):

DECLARE @g geometry;  
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 4, 4 0, 8 4, 4 8, 0 4), CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');  
SELECT @g.STArea() AS Area;  

In diesem Beispiel werden eine gültige CurvePolygon -Instanz und eine ungültige Instanz für die Verwendung von inneren Ringen veranschaulicht:

DECLARE @g1 geometry, @g2 geometry;  
SET @g1 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (-2 2, 2 2, 2 -2, -2 -2, -2 2))');  
IF @g1.STIsValid() = 1  
  BEGIN  
     SELECT @g1.STArea();  
  END  
SET @g2 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (0 5, 5 0, 0 -5, -5 0, 0 5))');  
IF @g2.STIsValid() = 1  
  BEGIN  
     SELECT @g2.STArea();  
  END  
SELECT @g1.STIsValid() AS G1, @g2.STIsValid() AS G2;  

Sowohl @g1 als auch @g2 verwenden denselben äußeren Begrenzungsring (einen Kreis mit dem Radius 5), und für beide wird ein Quadrat als innerer Ring verwendet. Die Instanz @g1 ist jedoch gültig, während die Instanz @g2 ungültig ist. Der Grund für die Ungültigkeit von @g2 ist, dass der innere Ring die vom äußeren Ring begrenzte Fläche in vier separate Bereiche teilt. Dies wird in der folgenden Zeichnung verdeutlicht:

Weitere Informationen

Polygon
CircularString
CompoundCurve
geometry-Datentyp-Methodenverweis
geography-Datentyp-Methodenverweis
Übersicht über räumliche Datentypen