Partager via


Créer, construire et interroger des instances geometry

Le type de données spatiales planaire, geometry, représente les données dans un système de coordonnées euclidien (plat). Ce type est implémenté en tant que type de données CLR (Common Language Runtime) dans SQL Server.

Le type geometry est prédéfini et disponible dans chaque base de données. Vous pouvez créer des colonnes de table de type geometry et opérer sur les données geometry comme vous le feriez avec d'autres types CLR.

Le type de données geometry (planaire) pris en charge par SQL Server est conforme à la spécification Open Geospatial Consortium (OGC) Simple Features for SQL version 1.1.0.

Pour plus d'informations sur les spécifications OGC, reportez-vous aux sites Web suivants :

SQL Server prend en charge un sous-ensemble de GML 3.1 standard défini dans le schéma suivant : https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd.

Dans cette rubrique

  • Création ou construction d'une nouvelle instance geometry

    • Création d'une instance geometry à partir d'une instance existante

    • Construction d'une instance geometry à partir d'une entrée WKT (Well-Known Text)

    • Construction d'une instance geometry à partir d'une entrée WKB (Well-Known Binary)

    • Construction d'une instance geometry à partir d'une entrée texte GML

  • Renvoi de données WKT et WKB à partir d'une instance geometry

  • Interrogation des propriétés et comportements des instances geometry

    • Informations sur la validité, le type d'instance et GeometryCollection

    • Nombre de points

    • Dimension

    • Vide

    • Limite, intérieur et extérieur

    • Enveloppe

    • Fermeture

    • ID de référence spatial (SRID)

  • Détermination de relations entre des instances geometry

  • Les instances geometry ont un SRID par défaut de zéro

  • Exemples

Création ou construction d'une nouvelle instance geometry

Création d'une instance geometry à partir d'une instance existante

Le type de données geometry fournit de nombreuses méthodes intégrées que vous pouvez utiliser pour créer des instances geometry basées sur des instances existantes.

[Haut de la page]

Construction d'une instance geometry à partir d'une entrée WKT (Well-Known Text)

Le type de données geometry fournit plusieurs méthodes intégrées qui génèrent une géométrie à partir de la représentation WKT OGC (Open Geospatial Consortium). La norme WKT est une chaîne de texte qui autorise l'échange de données géométriques sous forme textuelle.

[Haut de la page]

Construction d'une instance geometry à partir d'une entrée WKB (Well-Known Binary)

WKB est un format binaire spécifié par l'OGC (Open Geospatial Consortium) qui autorise l'échange de données de geometry entre une application cliente et une base de données SQL. Les fonctions suivantes acceptent l'entrée WKB pour construire des géométries :

[Haut de la page]

Construction d'une instance geometry à partir d'une entrée texte GML

Le type de données géométrie fournit une méthode qui génère une instance geometry à partir de GML, une représentation XML d'objets géométriques. SQL Server prend en charge un sous-ensemble de GML.

[Haut de la page]

Renvoi de données WKT et WKB à partir d'une instance geometry

Vous pouvez utiliser les méthodes suivantes pour retourner le format WKT ou WKB d'une instance geometry :

[Haut de la page]

Interrogation des propriétés et comportements des instances geometry

Toutes les instances geometry ont plusieurs propriétés qui peuvent être extraites par le biais des méthodes fournies par SQL Server. Les rubriques suivantes définissent les propriétés et comportements de types geometry et les méthodes permettant de les interroger.

Informations sur la validité, le type d'instance et GeometryCollection

Une fois qu'une instance geometry est construite, vous pouvez utiliser les méthodes suivantes pour déterminer si elle est formée correctement, retourner le type d'instance ou, s'il s'agit d'une instance de collection, retourner une instance geometry spécifique.

[Haut de la page]

Nombre de points

Toutes les instances geometry non vides sont constituées de points. Ces points représentent les coordonnées X et Y de latitude et de longitude du plan sur lequel les géométries sont dessinées. geometry fournit de nombreuses méthodes intégrées pour interroger les points d'une instance.

[Haut de la page]

Dimension

Une instance geometry non vide peut avoir 0, 1 ou 2 dimensions. Les geometries à zéro dimension, telles que Point et MultiPoint, n'ont aucune longueur ou surface. Les objets unidimensionnels, tels que LineString, CircularString, CompoundCurve et MultiLineString, ont une longueur. Les instances à deux dimensions, telles que Polygon, CurvePolygon et MultiPolygon, ont une surface et une longueur. Les instances vides indiquent une dimension de -1 et une GeometryCollection indique une surface dépendant des types de son contenu.

  • Pour retourner la dimension d'une instance
    STDimension

  • Pour retourner la longueur d'une instance
    STLength

  • Pour retourner la surface d'une instance
    STArea

[Haut de la page]

Vide

Une instance geometry vide n'a pas de points. La longueur des instances LineString, CircularString, CompoundCurve et MultiLineString vides est nulle. La surface des instances Polygon, CurvePolygon et MultiPolygon vides est 0.

  • Pour déterminer si une instance est vide
    STIsEmpty.

[Haut de la page]

Simple

Pour qu'une geometry de l'instance soit simple, elle doit satisfaire ces deux spécifications :

  • Chaque graphique de l'instance ne doit pas se croiser lui-même, sauf à ses points de terminaison.

  • Deux graphiques de l'instance ne peuvent se croiser l'un l'autre à un point qui n'est pas dans leurs limites.

[!REMARQUE]

Les géométries vides sont toujours simples.

  • Pour déterminer si une instance est simple
    STIsSimple.

[Haut de la page]

Limite, intérieur et extérieur

L'intérieur d'une instance geometry est l'espace occupé par l'instance et l'extérieur est l'espace qu'elle n'occupe pas.

Le terme Limite est défini par l'OGC comme suit :

  • Les instances Point et MultiPoint n'ont pas de limite.

  • Les limites de LineString et MultiLineString sont formées par les points de départ et points de terminaison, en supprimant ceux qui ont lieu un nombre pair de fois.

DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((0 1, 0 0, 1 0, 0 1), (1 1, 1 0))');
SELECT @g.STBoundary().ToString();

La limite d'une instance Polygon ou MultiPolygon est l'ensemble de ses anneaux.

DECLARE @g geometry;
SET @g = geometry::Parse('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1))');
SELECT @g.STBoundary().ToString();
  • Pour retourner la limite d'une instance
    STBoundary

[Haut de la page]

Enveloppe

L'enveloppe d'une instance geometry , également appelée zone englobante, est le rectangle aligné sur l'axe formé par les coordonnées minimales et maximales (X, Y) de l'instance.

  • Pour retourner l'enveloppe d'une instance
    STEnvelope

[Haut de la page]

Fermeture

Une instance geometry fermée est un graphique dont les points de départ et de terminaison sont les mêmes. Les instances Polygon sont considérées comme fermées. Les instances Point ne sont pas fermées.

Un anneau est une instance LineString simple et fermée.

  • Pour déterminer si une instance est fermée
    STIsClosed

  • Pour déterminer si une instance est un anneau
    STIsRing

  • Pour retourner l'anneau extérieur d'une instance Polygon
    STExteriorRing

  • Pour retourner le nombre d'anneaux intérieurs dans un Polygon
    STNumInteriorRing

  • Pour retourner un anneau intérieur spécifié d'un Polygon
    STInteriorRingN

[Haut de la page]

ID de référence spatial (SRID)

L'ID de référence spatial (SRID) est un identificateur spécifiant dans quel système de coordonnées l'instance geometry est représentée. Deux instances avec différents SRID ne peuvent pas être comparées.

  • Pour définir ou retourner le SRID d'une instance
    STSrid

Cette propriété peut être modifiée.

[Haut de la page]

Détermination de relations entre des instances geometry

Le type de données geometry fournit de nombreuses méthodes intégrées que vous pouvez utiliser pour déterminer les relations entre deux instances geometry.

  • Pour déterminer si deux instances comprennent le même ensemble de points
    STEquals

  • Pour déterminer si deux instances sont disjointes
    STDisjoint

  • Pour déterminer si deux instances se croisent
    STIntersects

  • Pour déterminer si deux instances se touchent
    STTouches

  • Pour déterminer si deux instances se chevauchent
    STOverlaps

  • Pour déterminer si deux instances se croisent
    STCrosses

  • Pour déterminer si une instance est dans une autre instance
    STWithin

  • Pour déterminer si une instance en contient une autre
    STContains

  • Pour déterminer si une instance en chevauche une autre
    STOverlaps

  • Pour déterminer si deux instances sont liées spatialement
    STRelate

  • Pour déterminer la distance la plus courte entre des points dans deux géométries
    STDistance

[Haut de la page]

Les instances geometry ont un SRID par défaut de zéro

Le SRID par défaut pour les instances geometry dans SQL Server est 0. Avec les données spatiales geometry, le SRID spécifique de l'instance spatiale n'est pas requis pour effectuer des calculs ; par conséquent, les instances peuvent résider dans un espace planaire indéfini. Pour indiquer un espace planaire indéfini dans les calculs de méthodes de type de données geometry, le Moteur de base de données SQL Server utilise SRID 0.

Exemples

Les deux exemples suivants montrent comment ajouter et interroger des données géométriques.

  • Le premier exemple crée une table avec une colonne d'identité et une colonne geometry GeomCol1. Une troisième colonne restitue la colonne geometry dans sa représentation OGC (Open Geospatial Consortium) WKT (Well-Known Text) et utilise la méthode STAsText(). Deux lignes sont ensuite insérées : une ligne contient une instance LineString de geometry et une ligne contient une instance Polygon.

    IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL 
        DROP TABLE dbo.SpatialTable;
    GO
    
    CREATE TABLE SpatialTable 
        ( id int IDENTITY (1,1),
        GeomCol1 geometry, 
        GeomCol2 AS GeomCol1.STAsText() );
    GO
    
    INSERT INTO SpatialTable (GeomCol1)
    VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));
    
    INSERT INTO SpatialTable (GeomCol1)
    VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));
    GO
    
  • Le deuxième exemple utilise la méthode STIntersection() pour retourner les points où les deux instances geometry précédemment insérées se croisent.

    DECLARE @geom1 geometry;
    DECLARE @geom2 geometry;
    DECLARE @result geometry;
    
    SELECT @geom1 = GeomCol1 FROM SpatialTable WHERE id = 1;
    SELECT @geom2 = GeomCol1 FROM SpatialTable WHERE id = 2;
    SELECT @result = @geom1.STIntersection(@geom2);
    SELECT @result.STAsText();
    

[Haut de la page]

Voir aussi

Concepts

Données spatiales (SQL Server)