Partager via


CircularString

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

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.

Instances CircularString

Le dessin suivant montre des instances CircularString valides :

Exemples CircularString

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

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 montre 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 montre 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));    

Voici le jeu de résultats.

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));  

Voici le jeu de résultats.

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

Présentation des types de données spatiales
CompoundCurve
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)
LineString