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 des nouvelles fonctionnalités spatiales introduites dans SQL Server 2012, y compris le CircularString
sous-type, téléchargez le livre blanc New Spatial Features in SQL Server 2012.
Instances CircularString
Le dessin suivant montre des instances CircularString
valides :
Instances acceptées
Un CircularString
instance est accepté s’il est vide ou contient un nombre impair de points, n, où n1>. 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
R. 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
Notez que la valeur de l’exemple CircularString
est proche de 2π (2 * pi), qui est 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
Vue d’ensemble des types de données spatialesCompoundCurveMakeValid (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 (geometry) Type de données)STPointOnSurface (type de données geometry)LineString