Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Il CompoundCurve s’agit d’une collection de zéro ou plus de CircularString ou LineString instances continues de types géométriques ou géographiques.
Important
Pour obtenir une description détaillée et des exemples des nouvelles fonctionnalités spatiales de cette version, y compris le sous-type, téléchargez le CompoundCurve livre blanc, Nouvelles fonctionnalités spatiales dans SQL Server 2012.
Une instance vide CompoundCurve peut être instanciée, mais pour qu’elle CompoundCurve soit valide, elle doit respecter les critères suivants :
Elle doit contenir au moins une instance de
CircularStringouLineString.La séquence d'instances de
CircularStringouLineStringdoit être continue.
Si un CompoundCurve contient une succession de plusieurs instances CircularString et LineString, le point de terminaison de chaque instance, à l'exception de la dernière, doit être le point de départ de l'instance suivante dans la succession. Cela signifie que si le point de fin d’une instance précédente dans la séquence est (4 3 7 2), le point de départ de l’instance suivante dans la séquence doit être (4 3 7 2). Notez que les valeurs Z(élévation) et M(measure) du point doivent également être identiques. S’il y a une différence entre les deux points, un System.FormatException est généré. Les points d’un CircularString n’ont pas besoin d’avoir une valeur Z ou M. Si aucune valeur Z ou M n’est donnée pour le point de fin de l’instance précédente, le point de départ de l’instance suivante ne peut pas inclure de valeurs Z ou M. Si le point de fin de la séquence précédente est (4 3), le point de départ de la séquence suivante doit être (4 3) ; elle ne peut pas être (4 3 7 2). Tous les points d’une CompoundCurve instance ne doivent avoir aucune valeur Z ou la même valeur Z.
instances de CompoundCurve
L’illustration suivante montre des types valides CompoundCurve .
Instances acceptées
CompoundCurve l’instance est acceptée s’il s’agit d’une instance vide ou répond aux critères suivants.
Toutes les instances contenues par l’instance
CompoundCurvesont acceptées comme segments d’arc circulaire. Pour plus d’informations sur les instances de segment d’arc circulaire acceptées, consultez LineString et CircularString.Tous les segments d’arc circulaire de l’instance
CompoundCurvesont connectés. Le premier point pour chaque segment d’arc circulaire réussi est le même que le dernier point du segment d’arc circulaire précédent.Remarque
Cela inclut les coordonnées Z et M. Ainsi, les quatre coordonnées X, Y, Z et M doivent être identiques.
Aucune des instances contenues n’est des instances vides.
L’exemple suivant montre les instances acceptées CompoundCurve .
DECLARE @g1 geometry = 'COMPOUNDCURVE EMPTY';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (-1 0, 2 0))';
L’exemple suivant montre CompoundCurve les instances qui ne sont pas acceptées. Ces instances génèrent System.FormatException.
DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING EMPTY)';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (1 0, 2 0))';
Instances valides
Une CompoundCurve instance est valide si elle répond aux critères suivants.
L’instance
CompoundCurveest acceptée.Toutes les instances de segment d’arc circulaire contenues par l’instance
CompoundCurvesont des instances valides.
L’exemple suivant montre des instances valides CompoundCurve .
DECLARE @g1 geometry = 'COMPOUNDCURVE EMPTY';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (-1 0, 2 0))';
DECLARE @g3 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 1 1, 1 1), (1 1, 3 5, 5 4))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();
@g3 est valide, car l’instance CircularString est valide. Pour plus d’informations sur la validité de l’instance CircularString , consultez CircularString.
L’exemple suivant montre CompoundCurve les instances qui ne sont pas valides.
DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 1 1, 1 1), (1 1, 3 5, 5 4, 3 5))';
DECLARE @g2 geometry = 'COMPOUNDCURVE((1 1, 1 1))';
DECLARE @g3 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 2 3, 1 1))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();
@g1 n’est pas valide, car la deuxième instance n’est pas une instance LineString valide.
@g2 n’est pas valide, car l’instance LineString n’est pas valide.
@g3 n’est pas valide, car l’instance CircularString n’est pas valide. Pour plus d’informations sur les instances valides CircularString et LineString, consultez CircularString et LineString.
Exemples
Un. Instanciation d’une instance de géométrie avec un CompoundCurve vide
L’exemple suivant montre comment créer une instance vide CompoundCurve :
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE EMPTY');
B. Déclaration et instanciation d’une instance de géométrie par un CompoundCurve dans la même instruction
L’exemple suivant montre comment déclarer et initialiser une geometry instance avec une CompoundCurvedans la même instruction :
DECLARE @g geometry = 'COMPOUNDCURVE ((2 2, 0 0),CIRCULARSTRING (0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0))';
Chapitre C. Instanciation d'un objet géographique avec une courbe composée
L’exemple suivant montre comment déclarer et initialiser une geography instance avec un CompoundCurve:
DECLARE @g geography = 'COMPOUNDCURVE(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 carré dans une instance CompoundCurve
L’exemple suivant utilise deux façons différentes d’utiliser une CompoundCurve instance pour stocker un carré.
DECLARE @g1 geometry, @g2 geometry;
SET @g1 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3), (1 3, 3 3),(3 3, 3 1), (3 1, 1 1))');
SET @g2 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3, 3 3, 3 1, 1 1))');
SELECT @g1.STLength(), @g2.STLength();
Les longueurs pour les deux @g1 et @g2 sont identiques. Notez à partir de l’exemple qu’une CompoundCurve instance peut stocker une ou plusieurs instances de LineString.
E. Instanciation d’une instance de géométrie à l’aide d’un *CompoundCurve* avec plusieurs *CircularStrings*
L’exemple suivant montre comment utiliser deux instances différentes CircularString pour initialiser un CompoundCurve.
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');
SELECT @g.STLength();
Cela produit la sortie suivante : 12.566370... qui est l’équivalent de 4π (4 * pi). L’instance CompoundCurve de l’exemple stocke un cercle avec un rayon de 2. Les deux exemples de code précédents n’ont pas besoin d’utiliser un CompoundCurve. Pour le premier exemple, une LineString instance aurait été plus simple et une CircularString instance aurait été plus simple pour le deuxième exemple. Toutefois, l’exemple suivant montre où une CompoundCurve meilleure alternative est possible.
F. Utilisation d’un CompoundCurve pour stocker un semi-cercle
L’exemple suivant utilise une CompoundCurve instance pour stocker un demi-cercle.
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 0 2))');
SELECT @g.STLength();
G. Stockage de plusieurs instances CircularString et LineString dans un CompoundCurve
L’exemple suivant montre comment plusieurs instances CircularStringLineString peuvent être stockées à l’aide d’un CompoundCurve.
DECLARE @g geometry
SET @g = geometry::Parse('COMPOUNDCURVE((3 5, 3 3), CIRCULARSTRING(3 3, 5 1, 7 3), (7 3, 7 5), CIRCULARSTRING(7 5, 5 7, 3 5))');
SELECT @g.STLength();
H. Stockage d’instances avec des valeurs Z et M
L’exemple suivant montre comment utiliser une instance CompoundCurve pour stocker une séquence d’instances CircularString et LineString avec des valeurs Z et M.
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(7 5 4 2, 5 7 4 2, 3 5 4 2), (3 5 4 2, 8 7 4 2))');
I. Illustration de la raison pour laquelle les instances CircularString doivent être déclarées explicitement
L’exemple suivant montre pourquoi CircularString les instances doivent être déclarées explicitement. Le programmeur tente de stocker un cercle dans une CompoundCurve instance.
DECLARE @g1 geometry;
DECLARE @g2 geometry;
SET @g1 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 2 4, 0 2))');
SELECT 'Circle One', @g1.STLength() AS Perimeter; -- gives an inaccurate amount
SET @g2 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');
SELECT 'Circle Two', @g2.STLength() AS Perimeter; -- now we get an accurate amount
La sortie est la suivante :
Circle One11.940039...
Circle Two12.566370...
Le périmètre du cercle 2 est d’environ 4π (4 * pi), qui correspond à la valeur réelle du périmètre. Toutefois, le périmètre du cercle 1 est considérablement incorrect. L’instance de CompoundCurve Circle One stocke un segment d’arc circulaire (ABC) et deux segments de ligne (CD, DA). L’instance CompoundCurve doit stocker deux segments d’arc circulaire (ABC, CDA) pour définir un cercle. Une LineString instance définit le deuxième ensemble de points (4 2, 2 4, 0 2) dans l’instance de CompoundCurve Circle One. Vous devez déclarer explicitement une CircularString instance à l’intérieur d’un CompoundCurve.
Voir aussi
STIsValid (type de données geometry)STLength (type de données geometry)STStartPoint (type de données geometry)STEndpoint (type de données geometry)LineStringCircularStringVue d'ensemble des types de données spatialesPoint