Partager via


CurvePolygon

A CurvePolygon est une surface topologiquement fermée définie par un anneau englobant extérieur et zéro ou plusieurs anneaux intérieurs

Important

Pour obtenir une description détaillée et des exemples de fonctionnalités spatiales introduites dans SQL Server 2012, y compris le CurvePolygon sous-type, téléchargez le livre blanc New Spatial Features in SQL Server 2012.

Les critères suivants définissent les attributs d’une CurvePolygon instance :

  • La limite de l’instance CurvePolygon est définie par l’anneau extérieur et tous les anneaux intérieurs.

  • L’intérieur de l’instance CurvePolygon est l’espace entre l’anneau extérieur et tous les anneaux intérieurs.

Une CurvePolygon instance diffère d’une Polygon instance dans laquelle une CurvePolygon instance peut contenir les segments d’arc circulaire suivants : CircularString et CompoundCurve.

instances de CompoundCurve

L'illustration ci-dessous montre des chiffres valides CurvePolygon :

Instances acceptées

Pour qu’une CurvePolygon instance soit acceptée, elle doit être vide ou contenir uniquement des anneaux d’arc circulaires acceptés. Un anneau d’arc circulaire accepté répond aux exigences suivantes.

  1. Est-ce une instance acceptée LineString, CircularString ou CompoundCurve ? Pour plus d’informations sur les instances acceptées, consultez LineString, CircularString et CompoundCurve.

  2. A au moins quatre points.

  3. Le point de début et de fin a les mêmes coordonnées X et Y.

    Remarque

    Les valeurs Z et M sont ignorées.

L’exemple suivant montre les instances acceptées CurvePolygon .

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 est accepté même si les points de début et de fin ont des valeurs Z différentes, car les valeurs Z sont ignorées. @g5 est accepté même si l’instance de geography type n’est pas valide.

Les exemples suivants provoquent 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 n’est pas accepté, car les points de début et de fin n’ont pas la même valeur Y. @g2 n’est pas accepté parce que l’anneau n’a pas assez de points.

Instances valides

Pour qu’une CurvePolygon instance soit valide, les anneaux extérieurs et intérieurs doivent respecter les critères suivants :

  1. Ils ne peuvent toucher qu’à des points tangents uniques.

  2. Ils ne peuvent pas se croiser.

  3. Chaque anneau doit contenir au moins quatre points.

  4. Chaque anneau doit être un type de courbe acceptable.

CurvePolygon les instances doivent également répondre à des critères spécifiques selon qu’elles sont de type geometry ou de type geography.

Type de données Géométrie

Une instance geometryCurvePolygon valide doit avoir les attributs suivants :

  1. Tous les anneaux intérieurs doivent être contenus dans l’anneau extérieur.

  2. Peut avoir plusieurs anneaux intérieurs, mais un anneau intérieur ne peut pas contenir un autre anneau intérieur.

  3. Aucun anneau ne peut se croiser ni croiser un autre anneau.

  4. Les anneaux ne peuvent toucher qu’à des points de tangence uniques (le nombre de points où les anneaux se touchent doit être fini).

  5. L’intérieur du polygone doit être connecté.

L’exemple suivant montre des instances geometryCurvePolygon valides.

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

Les instances CurvePolygon ont les mêmes règles de validité que les instances polygones à l’exception que les instances CurvePolygon peuvent accepter les nouveaux types de segments d’arc circulaire. Pour plus d’exemples d’instances valides ou non valides, consultez Polygon.

Type de données géographie

Une instance geographyCurvePolygon valide doit avoir les attributs suivants :

  1. L’intérieur du polygone est connecté à l’aide de la règle de gauche.

  2. Aucun anneau ne peut se croiser ni croiser un autre anneau.

  3. Les anneaux ne peuvent se toucher qu’à des points tangents simples (le nombre de points où les anneaux se touchent doit être fini).

  4. L’intérieur du polygone doit être connecté.

L’exemple suivant montre une instance CurvePolygon geography valide.

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

Exemples

A. Instanciation d'une instance géométrique avec un CurvePolygon vide

Cet exemple montre comment créer une instance vide CurvePolygon :

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

B. Déclaration et instanciation d’une instance de géométrie avec un CurvePolygon dans une seule instruction

Cet extrait de code montre comment déclarer et initialiser une instance geometry avec une CurvePolygon dans la même instruction :

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

Chapitre C. Instanciation d'une instance Geography avec un CurvePolygon

Cet extrait de code montre comment déclarer et initialiser une geography instance avec un CurvePolygon:

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. Stockage d’un CurvePolygon avec seulement un anneau englobant extérieur

Cet exemple montre comment stocker un cercle simple dans une instance CurvePolygon, seul un anneau de délimitation extérieur est utilisé pour définir le cercle.

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. Stockage d'un polygone de courbes contenant des anneaux intérieurs

Cet exemple crée un donut dans une CurvePolygon instance (une couronne externe et une couronne interne sont utilisés pour définir le donut) :

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;  

Cet exemple montre à la fois une instance valide et une instance non valide CurvePolygon lors de l’utilisation d’anneaux intérieurs :

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;  

Les deux @g1 et @g2 utilisent le même anneau englobant extérieur : un cercle avec un rayon de 5 et ils utilisent tous deux un carré pour un anneau intérieur. Toutefois, l’instance @g1 est valide, mais l’instance @g2 n’est pas valide. La raison @g2 qui n’est pas valide est que l’anneau intérieur fractionne l’espace intérieur délimité par l’anneau extérieur en quatre régions distinctes. Le dessin suivant montre ce qui s’est produit :

Voir aussi

Polygone
CircularString
CompoundCurve
référence de méthode de type de données geometry
Référence de méthode de type de données géographie
Vue d’ensemble des types de données spatiales