Partager via


Chaîne Circulaire

A CircularString est une collection de zéro ou plus de segments d’arc circulaire continus. Un segment d’arc circulaire est un segment courbé défini par trois points dans un plan bidimensionnel ; le premier point ne peut pas être le même que le troisième point. Si les trois points d’un segment d’arc circulaire sont collineux, le segment d’arc est traité comme un segment de trait.

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, Nouvelles fonctionnalités spatiales dans SQL Server 2012.

Instances de CircularString

Le dessin ci-dessous présente des instances valides CircularString :

Instances acceptées

Une CircularString instance est acceptée s’il est vide ou contient un nombre impair de points, n, où n > 1. Les instances suivantes CircularString 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 cette CircularString instance peut être acceptée, mais non valide. La déclaration d’instance CircularString suivante n’est pas acceptée. Cette déclaration génère un System.FormatException.

DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';

Instances valides

Une instance valide CircularString doit être vide ou avoir les attributs suivants :

  • Il doit contenir au moins un segment d’arc circulaire (autrement dit, avoir un minimum de trois points).

  • Le dernier point de terminaison de chaque segment d’arc circulaire de la séquence, à l’exception du dernier segment, doit être le premier point de terminaison du segment suivant dans la séquence.

  • Il doit avoir un nombre impair de points.

  • Il ne peut pas se chevaucher sur un intervalle.

  • Bien que CircularString les instances puissent contenir des segments de trait, ces segments de ligne doivent être définis par trois points collineux.

L’exemple suivant montre des instances valides CircularString .

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 CircularString instance doit contenir au moins deux segments d’arc circulaire pour définir un cercle complet. Une CircularString instance ne peut pas utiliser un seul segment d’arc circulaire (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 les 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 circulaire sera traité comme un segment de ligne :

  • Lorsque les trois points sont collineaires (par exemple, (1 3, 4 4, 7 5)).

  • Lorsque le premier et le point central sont identiques, mais que le troisième point est différent (par exemple, (1 3, 1 3, 7 5)).

  • Lorsque le milieu et le dernier point sont identiques, mais que le premier point est différent (par exemple, (1 3, 4 4, 4 4)).

Exemples

A. Instanciation d’une instance Geometry avec un CircularString vide

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

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

B. Instanciation d’une instance de géométrie à l’aide d’une chaîne circulaire avec un segment d’arc circulaire

L’exemple suivant montre comment créer une CircularString instance avec un seul segment d’arc circulaire (demi-cercle) :

DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();

Chapitre C. Instanciation d’une instance géométrique à l’aide d’une ChaîneCirculaire avec plusieurs segments d’arc circulaire

L’exemple suivant montre comment créer une CircularString instance avec plusieurs segments d’arc circulaire (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));  

Cela produit la sortie suivante :

Circumference = 6.28319

Comparez la sortie quand elle LineString est utilisée au lieu 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));

Cela 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 Geometry avec circularString dans la même instruction

Cet extrait de code montre comment déclarer et instancier une geometry instance avec une CircularString instruction 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 geography avec circularString

L’exemple suivant montre comment déclarer et instancier une geography instance 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 de géométrie avec un CircularString qui est rectiligne.

L’exemple suivant montre comment créer une CircularString instance 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 (type de données geometry)STPointOnSurface (type de données geometry)LineString