CurvePolygon
Un 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 nouvelles fonctionnalités spatiales dans cette version, y compris le sous-type CurvePolygon, téléchargez le livre blanc, Nouvelles fonctionnalités spatiales dans SQL Server 2012.
Les critères suivants définissent les attributs d'une instance CurvePolygon :
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 désigne l'espace situé entre l'anneau extérieur et tous les anneaux intérieurs.
Une instance CurvePolygon diffère d'une instance Polygon en cela qu'une instance CurvePolygon peut contenir les segments d'arc de cercle suivants : CircularString et CompoundCurve.
Instances CompoundCurve
L'illustration ci-dessous montre des figures de CurvePolygon valides :
Instances acceptées
Pour qu'une instance CurvePolygon soit acceptée, elle doit être soit vide, soit contenir uniquement des anneaux d'arc circulaires acceptés. Un anneau d'arc circulaire accepté satisfait les exigences suivantes.
Être une instance acceptée LineString, CircularString ou CompoundCurve. Pour plus d'informations sur les instances acceptées, consultez LineString, CircularString et CompoundCurve.
Contenir au moins quatre points.
Le point de début et le point de fin ont les mêmes coordonnées X et Y.
[!REMARQUE]
Les valeurs Z et M sont ignorées.
L'exemple suivant illustre des instances CurvePolygon acceptées.
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é bien que les points de début et de fin aient des valeurs Z différentes, car les valeurs Z sont ignorées. @g5 est accepté même si l'instance de type geography n'est pas valide.
Les exemples suivants lèvent une 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é parce que les points de début et de fin n'ont pas la même valeur Y. @g2 n'est pas accepté car la boucle n'a pas assez de points.
Instances valides
Pour qu'une instance CurvePolygon soit valide, les anneaux extérieur et intérieur doivent répondre aux critères suivants :
Ils peuvent se toucher uniquement à des points de tangentes uniques.
Ils ne peuvent pas se croiser l'un l'autre.
Chaque anneau doit contenir au moins quatre points.
Chaque anneau doit être un type de courbe acceptable.
Les instances CurvePolygon doivent également répondre à des critères spécifiques, selon qu'il s'agisse de types de données geometry ou geography.
Type de données geometry
Une instance geometry CurvePolygon valide doit avoir les attributs suivants :
Tous les anneaux intérieurs doivent être contenus dans l'anneau extérieur.
Elle peut contenir plusieurs anneaux intérieurs, mais un anneau intérieur ne peut pas contenir un autre anneau intérieur.
Aucun anneau ne peut se croiser lui-même ni croiser un autre anneau.
Les anneaux ne peuvent se toucher qu'à des points de tangentes uniques (nombre de points où le contact des anneaux doit être fini).
L'intérieur du polygone doit être connecté.
L'exemple suivant montre des instances geometry CurvePolygon 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 Polygon, à l'exception près que les instances CurvePolygon peuvent accepter les nouveaux types de segment d'arc de cercle. Pour obtenir davantage d'exemples d'instances valides ou non valides, consultez Polygon.
Type de données geography
Une instance geography CurvePolygon valide doit avoir les attributs suivants :
L'intérieur du polygone est connecté à l'aide de la règle gauche.
Aucun anneau ne peut se croiser lui-même ni croiser un autre anneau.
Les anneaux ne peuvent se toucher qu'à des points de tangentes uniques (nombre de points où le contact des anneaux doit être fini).
L'intérieur du polygone doit être connecté.
L'exemple suivant montre une instance geography CurvePolygon 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 geometry avec un CurvePolygon Vide
Cet exemple indique comment créer une instance CurvePolygon vide :
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON EMPTY');
B.Déclaration et instanciation d'une instance geometry avec un CurvePolygon dans la même instruction
Cet extrait de code indique comment déclarer et initialiser une instance geometry avec un CurvePolygon dans la même instruction :
DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'
C.Instanciation d'une instance geography avec un CurvePolygon
Cet extrait de code indique comment déclarer et initialiser une instance geography 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 uniquement avec un anneau englobant extérieur
Cet exemple indique comment stocker un cercle simple dans une instance CurvePolygon (seul un anneau englobant 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 CurvePolygon contenant des anneaux intérieurs
Cet exemple crée une bouée dans une instance CurvePolygon (à la fois un anneau englobant extérieur et un anneau intérieur sont utilisés pour définir la bouée) :
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 CurvePolygon valide et une instance non valide 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;
@g1 et @g2 utilisent tous les deux le même anneau englobant extérieur, un cercle avec un rayon de 5, et un carré comme anneau intérieur. Toutefois, l'instance @g1 est valide, mais l'instance @g2 n'est pas valide. La raison pour laquelle @g2 n'est pas valide est que l'anneau intérieur fractionne l'espace intérieur englobé par l'anneau extérieur en quatre régions séparées. Le dessin suivant montre ce qui s'est produit :
Voir aussi
Concepts
Référence de méthodes de type de données geometry
Présentation des types de données spatiales