Créer, construire et interroger des instances géométriques

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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 la norme GML 3.1, qui est définie dans le schéma suivant : https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd.

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.

Pour créer une mémoire tampon autour d'une géométrie
STBuffer (type de données geometry)

BufferWithTolerance (type de données geometry)

Pour créer une version simplifiée d'une géométrie
Reduce (type de données geometry)

Pour créer la forme convexe d'une géométrie
STConvexHull (type de données geometry)

Pour créer une géométrie à partir de l'intersection de deux géométries
STIntersection (type de données geometry)

Pour créer une géométrie à partir de l'union de deux géométries
STUnion (type de données geometry)

Pour créer une géométrie à partir des points où une géométrie n'en chevauche pas une autre
STDifference (type de données geometry)

Pour créer une géométrie à partir des points où deux géométries ne se chevauchent pas
STSymDifference (type de données geometry)

Pour créer une instance Point arbitraire qui repose sur une géométrie existante
STPointOnSurface (type de données geometry)

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.

Pour construire tout type d'instance geometry à partir d'une entrée WKT
STGeomFromText (type de données geometry)

Parse (type de données geometry)

Pour construire une instance Point géométrique à partir d'entrée WKT
STPointFromText (type de données geometry)

Pour construire une instance MultiPoint geometry à partir d'une entrée WKT
STMPointFromText (type de données geometry)

Pour construire une instance LineString geometry à partir d'une entrée WKT
STLineFromText (type de données geometry)

Pour construire une instance MultiLineString geometry à partir d'une entrée WKT
STMLineFromText (type de données geometry)

Pour construire une instance Polygon geometry à partir d'une entrée WKT
STPolyFromText (type de données geometry)

Pour construire une instance MultiPolygon geometry à partir d'une entrée WKT
STMPolyFromText (type de données geometry)

Pour construire une instance GeometryCollection geometry à partir d'une entrée WKT
STGeomCollFromText (type de données geometry)

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 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 :

Pour construire tout type d'instance geometry à partir d'une entrée WKB
STGeomFromWKB (type de données geometry)

Pour construire une instance Point geometry à partir d'une entrée WKB
STPointFromWKB (type de données geometry)

Pour construire une instance MultiPoint geometry à partir d'une entrée WKB
STMPointFromWKB (type de données geometry)

Pour construire une instance LineString geometry à partir d'une entrée WKB
STLineFromWKB (type de données geometry)

Pour construire une instance MultiLineString geometry à partir d'une entrée WKB
STMLineFromWKB (type de données geometry)

Pour construire une instance Polygon geometry à partir d'une entrée WKB
STPolyFromWKB (type de données geometry)

Pour construire une instance MultiPolygon geometry à partir d'une entrée WKB
STMPolyFromWKB (type de données geometry)

Pour construire une instance GeometryCollection geometry à partir d'une entrée WKB
STGeomCollFromWKB (type de données geometry)

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

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

Pour construire tout type d'instance geometry à partir d'une entrée GML
GeomFromGml (type de données geometry)

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 :

Pour retourner la représentation WKT d'une instance geometry
STAsText (type de données geometry)

ToString (type de données geometry)

Pour retourner la représentation WKT d'une instance geometry incluant des valeurs Z et M
AsTextZM (type de données geometry)

Pour retourner la représentation WKB d'une instance geometry
STAsBinary (type de données geometry)

Pour retourner une représentation GML d'une instance geometry
AsGml (type de données geometry)

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.

Pour retourner le type d'instance d'une géométrie
STGeometryType (type de données geometry)

Pour déterminer si une géométrie est un type d'instance donné
InstanceOf (type de données geometry)

Pour déterminer si une instance geometry est de forme correcte pour son type d'instance
STIsValid (type de données geometry)

Pour convertir une instance geometry en une instance geometry de forme correcte avec un type d'instance
MakeValid (type de données geometry)

Pour retourner le nombre de géométries dans une instance de collection geometry
STNumGeometries (type de données geometry)

Pour retourner une géométrie spécifique dans une instance de collection géométrique
STGeometryN (type de données geometry) STGeometryN (type de données geometry)

Number of 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.

Pour retourner le nombre de points qui composent une instance
STNumPoints (type de données geometry)

Pour retourner un point spécifique dans une instance
STPointN

Pour retourner un point arbitraire qui repose sur une instance
STPointOnSurface

Pour retourner le point de départ d'une instance
STStartPoint

Pour retourner le point de terminaison d'une instance
STEndpoint

Pour retourner la coordonnée X d'une instance Point
STX (type de données geometry)

Pour retourner la coordonnée Y d'une instance Point
STY

Pour retourner le point central géométrique d'une instance Polygone, CurvePolygon ou MultiPolygon
STCentroid

Dimension

Une instance geometry non vide peut avoir 0, 1 ou 2 dimensions. Les instances geometryà zéro dimension, telles que Point et MultiPoint, n’ont aucune longueur ou surface. Les objets unidimensionnels, tels que LineString, CircularString, CompoundCurveet MultiLineStringont une longueur. Les instances à deux dimensions, telles que Polygon, CurvePolygonet MultiPolygon, ont une surface et une longueur. Les instances vides indiquent une dimension de -1 et une instance GeometryCollection indique une surface en fonction 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

Vide

Une instance geometryvide n’a aucun point. La longueur des instances LineString, CircularString, CompoundCurveet MultiLineString vides est nulle. La surface des instances Polygon, CurvePolygonet MultiPolygon vides est 0.

Pour déterminer si une instance est vide
STIsEmpty.

Simple

Pour qu’une géometrie de l’instance soit simple, elle doit remplir ces deux conditions :

  • 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.

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.

Une limite (Boudary à est définie par l’OGC comme suit :

  • Les instancesPoint et MultiPoint n'ont pas de limite.

  • Les limites deLineString et MultiLineString boundaries are formed by the start points et end points, removing those that occur an even number of times.

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

Enveloppe

L’ enveloppe d’une instance geometry , aussi appelée cadre englobant, 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

Fermeture

Une instance geometryfermée est un graphique dont les points de début et de fin sont identiques. Les instancesPolygon sont considérées comme fermées. Les instancesPoint 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

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

Remarque

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

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

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 des méthodes du 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.

Exemple A.

Cet 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 geometryet 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  

Exemple B.

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

Voir aussi

Données spatiales (SQL Server)