Freigeben über


CurvePolygon

A CurvePolygon ist eine topologische geschlossene Oberfläche, die durch einen äußeren Begrenzungsring und null oder mehr Innenringe definiert ist.

Von Bedeutung

Für eine ausführliche Beschreibung und Beispiele zu den räumlichen Features, die in SQL Server 2012, einschließlich des CurvePolygon Untertyps, eingeführt wurden, laden Sie das White Paper "Neue räumliche Features in SQL Server 2012" herunter.

Die folgenden Kriterien definieren Attribute einer CurvePolygon Instanz:

  • Die Grenze der CurvePolygon Instanz wird durch den Außenring und alle Innenringe definiert.

  • Das Innere der CurvePolygon Instanz ist der Raum zwischen dem Außenring und allen Innenringen.

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

CompoundCurve-Instanzen

Abbildung unten zeigt gültige CurvePolygon Zahlen:

Akzeptierte Vorkommen

Damit eine CurvePolygon Instanz akzeptiert wird, muss sie entweder leer sein oder nur kreisförmige Bogenringe enthalten, die akzeptiert werden. Ein akzeptierter Kreisbogenring erfüllt die folgenden Anforderungen.

  1. Ist eine akzeptierte LineString, CircularStringoder CompoundCurve Instanz. Weitere Informationen zu akzeptierten Instanzen finden Sie unter LineString, CircularString und CompoundCurve.

  2. Hat mindestens vier Punkte.

  3. Der Start- und Endpunkt weisen die gleichen X- und Y-Koordinaten auf.

    Hinweis

    Z- und M-Werte werden ignoriert.

Das folgende Beispiel zeigt akzeptierte CurvePolygon Instanzen.

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 die Anfangs- und Endpunkte unterschiedliche Z-Werte aufweisen, da Z-Werte ignoriert werden. @g5 wird akzeptiert, obwohl die geography Typinstanz ungültig ist.

Die folgenden Beispiele lösen aus System.FormatException.

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 die Anfangs- und Endpunkte nicht den gleichen Y-Wert aufweisen. @g2 wird nicht akzeptiert, da der Ring nicht über genügend Punkte verfügt.

Gültige Instanzen

Damit eine CurvePolygon Instanz gültig ist, müssen sowohl die Außen- als auch die Innenringe die folgenden Kriterien erfüllen.

  1. Sie dürfen nur an einzelnen Tangenspunkten berühren.

  2. Sie können sich nicht gegenseitig kreuzen.

  3. Jeder Ring muss mindestens vier Punkte enthalten.

  4. Jeder Ring muss ein akzeptabler Kurventyp sein.

CurvePolygon-Instanzen müssen ebenfalls spezifische Kriterien erfüllen, abhängig davon, ob sie geometry oder geography Datentypen sind.

Geometriedatentyp

Eine gültige geometryCurvePolygon-Instanz muss die folgenden Attribute aufweisen:

  1. Alle Innenringe müssen innerhalb des Außenrings enthalten sein.

  2. Kann mehrere Innenringe haben, aber ein Innenring darf keinen anderen Innenring enthalten.

  3. Kein Ring kann sich selbst oder einen anderen Ring kreuzen.

  4. Ringe können sich nur an einzelnen Tangentenpunkten berühren (die Anzahl der Punkte, an denen Ringe sich berühren, muss endlich sein).

  5. Das Innere des Polygons muss verbunden sein.

Das folgende Beispiel zeigt gültige geometryCurvePolygon-Instanzen .

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

CurvePolygon-Instanzen weisen dieselben Gültigkeitsregeln wie Polygoninstanzen auf, mit der Ausnahme, dass CurvePolygon-Instanzen die neuen Kreisbogensegmenttypen akzeptieren können. Weitere Beispiele für gültige oder ungültige Instanzen finden Sie unter Polygon.

Datentyp "Geografie"

Eine gültige geographyCurvePolygon-Instanz muss die folgenden Attribute aufweisen:

  1. Das Innere des Polygons wird mit der linken Regel verbunden.

  2. Kein Ring kann sich selbst oder ein anderer Ring kreuzen.

  3. Ringe können sich nur an einzelnen Berührungspunkten berühren (die Anzahl der Punkte, an denen die Ringe sich berühren, muss endlich sein).

  4. Das Innere des Polygons muss verbunden sein.

Das folgende Beispiel zeigt eine gültige Geografische CurvePolygon-Instanz.

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

Beispiele

A Instanziierung einer Geometrie-Instanz mit einem leeren CurvePolygon

In diesem Beispiel wird gezeigt, wie Sie eine leere CurvePolygon Instanz erstellen:

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

B. Deklarieren und Instanziieren einer Geometrieinstanz mit einem CurvePolygon in derselben Anweisung

Dieser Codeausschnitt zeigt, wie Sie eine Geometrieinstanz mit einer CurvePolygon in derselben Anweisung deklarieren und initialisieren:

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

C. Instanziierung einer Geografieinstanz mit einem „CurvePolygon“

Dieser Anweisungsblock zeigt, wie Sie eine geography-Instanz mit einem CurvePolygon deklarieren und initialisieren:

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 CurvePolygons mit nur einem äußeren Begrenzungsring

In diesem Beispiel wird gezeigt, wie ein einfacher Kreis in einer CurvePolygon Instanz gespeichert wird (zum Definieren des Kreises wird nur ein äußerer Begrenzungsring verwendet):

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 Kurvenpolygons mit Innenringen

In diesem Beispiel wird ein Donut in einer CurvePolygon instanz erstellt (sowohl ein äußerer Begrenzungsring als auch ein Innenring werden verwendet, um den Donut zu definieren):

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;  

Dieses Beispiel zeigt sowohl eine gültige CurvePolygon Instanz als auch eine ungültige Instanz bei Verwendung von Innenringen:

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;  

Beide @g1 verwenden @g2 den gleichen äußeren Begrenzungsring: ein Kreis mit einem Radius von 5 und beide verwenden ein Quadrat für einen Innenring. Die Instanz @g1 ist jedoch gültig, die Instanz @g2 ist jedoch ungültig. Der Grund, @g2 der ungültig ist, ist, dass der Innenring den innenbereich, der durch den Außenring begrenzt ist, in vier separate Bereiche aufteilt. Die folgende Zeichnung zeigt, was aufgetreten ist:

Siehe auch

Vieleck
CircularString
CompoundCurve
Geometry Data Type Method Reference
Referenz zur Geography-Datentypmethode
Übersicht über räumliche Datentypen