Partager via


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