CircularString
Un CircularString est une collection de zéro ou plusieurs segments d'arc de cercle continus. Un segment d'arc de cercle est un segment courbé défini par trois points dans un plan à deux dimensions ; le premier point doit être différent du troisième point. Si les trois points d'un segment d'arc de cercle sont colinéaires, le segment d'arc est traité comme un segment de ligne.
Important
Pour obtenir une description détaillée et des exemples de nouvelles fonctionnalités spatiales dans cette version, y compris le sous-type CircularString, téléchargez le livre blanc, Nouvelles fonctionnalités spatiales dans SQL Server 2012.
Instances CircularString
Le dessin suivant montre des instances CircularString valides :
Instances acceptées
Une instance CircularString est acceptée si elle est vide ou si elle contient un nombre impair de points, n, où n > 1. Les instances CircularString suivantes sont acceptées.
DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 2 0, 1 1)';
@g3 montre que l'instance CircularString peut être acceptée, mais pas valide. La déclaration suivante d'instance de CircularString n'est pas acceptée. Cette déclaration lève une System.FormatException.
DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';
Instances valides
Une instance CircularString valide doit être vide ou avoir les attributs suivants :
Elle doit contenir au moins un segment d'arc de cercle (autrement dit, voir un minimum de trois points).
Le dernier point de terminaison de chaque segment d'arc de cercle de la séquence, à l'exception du dernier segment, doit correspondre au premier point de terminaison du segment suivant dans la séquence.
Elle doit comporter un nombre impair de points.
Elle ne peut pas se chevaucher sur un intervalle.
Bien que les instances CircularString puissent contenir des segments de ligne, ces segments de ligne doivent être définis par trois points colinéaires.
L'exemple suivant montre des instances CircularString valides.
DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1, 0 1)';
DECLARE @g4 geometry = 'CIRCULARSTRING(1 1, 2 2, 2 2)';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(),@g4.STIsValid();
Une instance CircularString doit contenir au moins deux segments d'arc de cercle pour définir un cercle complet. Une instance CircularString ne peut pas utiliser un seul segment d'arc de cercle (tel que (1 1, 3 1, 1 1)) pour définir un cercle complet. Utilisez (1 1, 2 2, 3 1, 2 0, 1 1) pour définir le cercle.
L'exemple suivant montre des instances CircularString qui ne sont pas valides.
DECLARE @g1 geometry = 'CIRCULARSTRING(1 1, 2 0, 1 1)';
DECLARE @g2 geometry = 'CIRCULARSTRING(0 0, 0 0, 0 0)';
SELECT @g1.STIsValid(), @g2.STIsValid();
Instances avec des points colinéaires
Dans les cas suivants un segment d'arc de cercle sera traité comme un segment de ligne :
lorsque les trois points sont colinéaires (par exemple, (1 3, 4 4, 7 5)) ;
lorsque le premier point et le point central sont les mêmes, mais que le troisième point est différent (par exemple, (1 3, 1 3, 7 5)) ;
lorsque le point central et le dernier point sont les mêmes, mais que le premier point est différent (par exemple, (1 3, 4 4, 4 4)).
Exemples
A.Instanciation d'une instance géométrique à l'aide d'un CircularString vide
Cet exemple indique comment créer une instance CircularString vide :
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');
B.Instanciation d'une instance géométrique à l'aide d'un CircularString avec un segment d'arc de cercle
L'exemple suivant indique comment créer une instance CircularString avec un segment d'arc de cercle unique (demi-cercle) :
DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();
C.Instanciation d'une instance géométrique à l'aide d'un CircularString avec plusieurs segments d'arc de cercle
L'exemple suivant indique comment créer une instance CircularString avec plusieurs segments d'arc de cercle (cercle complet) :
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1)');
SELECT 'Circumference = ' + CAST(@g.STLength() AS NVARCHAR(10));
Ce code produit la sortie suivante :
Circumference = 6.28319
Comparez la sortie lorsque LineString est utilisé à la place de CircularString :
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(2 1, 1 2, 0 1, 1 0, 2 1)', 0);
SELECT 'Perimeter = ' + CAST(@g.STLength() AS NVARCHAR(10));
Ce code produit la sortie suivante :
Perimeter = 5.65685
Remarquez que la valeur de l'exemple de CircularString est proche de 2∏, ce qui correspond à la circonférence réelle du cercle.
D.Déclaration et instanciation d'une instance géométrique avec un CircularString dans la même instruction
Cet extrait de code indique comment déclarer et instancier une instance geometry avec un CircularString dans la même instruction :
DECLARE @g geometry = 'CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)';
E.Instanciation d'une instance géographique avec un CircularString
L'exemple suivant indique comment déclarer et instancier une instance geography avec un CircularString :
DECLARE @g geography = 'CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';
F.Instanciation d'une instance géométrique avec un CircularString qui est une ligne droite
L'exemple suivant indique comment créer une instance CircularString qui est une ligne droite :
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);
Voir aussi
Référence
MakeValid (type de données geography)
MakeValid (type de données geometry)
STIsValid (type de données geometry)
STIsValid (type de données geography)
STLength (type de données geometry)
STStartPoint (type de données geometry)
STEndpoint (type de données geometry)
STPointN (type de données geometry)
STNumPoints (type de données geometry)
STIsRing (type de données geometry)
STIsClosed (type de données geometry)
STPointOnSurface (type de données geometry)