Partager via


CircularString

S’applique à : point de terminaison d’analytique SQL Azure SQL Database Azure SQL Database Azure SQL Dans Microsoft Fabric Warehouse dans Microsoft Fabric SQL Database dans Microsoft Fabric SQL Database

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 :

Diagramme d’exemples de mesures spatiales 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 indique que l’instance CircularString peut être acceptée, mais non 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 collineux.

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. Instancier une instance Geometry avec un CircularString vide

Cet exemple indique comment créer une instance CircularString vide :

DECLARE @g geometry;  
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');  

B. Instancier une instance geometry à l’aide d’une chaîne circulaire avec un segment d’arc circulaire

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. Instancier une instance geometry à l’aide d’une chaîne circulaire avec plusieurs segments d’arc circulaire

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  

La valeur de l’exemple CircularString est proche de 2∏, qui est la circonférence réelle du cercle.

D. Déclarer et instancier une instance Geometry avec une 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. Instancier une instance geography avec 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. Instancier une instance Geometry avec une 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);