Partager via


Créer, construire et interroger des instances geometry

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

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éer ou construire une nouvelle instance geometry

Créer 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)

Construire une instance geometry à partir d’une entrée de texte connue

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)

Construire une instance geometry à partir d’une entrée binaire connue

WKB est un format binaire spécifié par l’Open Geospatial Consortium (OGC) qui permet d’échanger des 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)

Construire une instance geometry à partir d’une entrée de 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)

Retourner un texte connu et un binaire bien connu à 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)

Interroger les propriétés et les 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 de validité, de 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)

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.

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 (type de données geometry)

Pour retourner un point arbitraire qui repose sur une instance
STPointOnSurface (type de données geometry)

Pour retourner le point de départ d'une instance
STStartPoint (type de données geometry)

Pour retourner le point de terminaison d’une instance
STEndpoint (type de données geometry)

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 (type de données geometry)

Pour retourner le point central géométrique d'une instance Polygone, CurvePolygon ou MultiPolygon
STCentroid (type de données geometry)

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 (type de données geometry)

Pour retourner la longueur d'une instance
STLength (type de données geometry)

Pour retourner la surface d'une instance
STArea (type de données geometry)

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 (type de données geometry).

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 (type de données geometry).

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 (type de données geometry)

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 (type de données geometry)

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 (type de données geometry)

Pour déterminer si une instance est un anneau
STIsRing (type de données geometry)

Pour retourner l'anneau extérieur d'une instance Polygon
STExteriorRing (type de données geometry)

Pour retourner le nombre d'anneaux intérieurs dans un Polygon
STNumInteriorRing (type de données geometry)

Pour retourner un anneau intérieur spécifié d'un Polygon
STInteriorRingN (type de données geometry)

ID de référence spatiale (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 (type de données geometry)

Remarque

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

Déterminer les relations entre les 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 (type de données geometry)

Pour déterminer si deux instances sont disjointes
STDisjoint (type de données geometry)

Pour déterminer si deux instances se croisent
STIntersects (type de données geometry)

Pour déterminer si deux instances se touchent
STTouches (type de données geometry)

Pour déterminer si deux instances se chevauchent
STOverlaps (type de données geometry)

Pour déterminer si deux instances se croisent
STCrosses (type de données geometry)

Pour déterminer si une instance est dans une autre instance
STWithin (type de données geometry)

Pour déterminer si une instance en contient une autre
STContains (type de données geometry)

Pour déterminer si une instance en chevauche une autre
STOverlaps (type de données geometry)

Pour déterminer si deux instances sont liées spatialement
STRelate (type de données geometry)

Pour déterminer la distance la plus courte entre des points dans deux géométries
STDistance (type de données geometry)

instances geometry par défaut sur zéro SRID

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 non défini dans les calculs des méthodes de type de données geometry, sql Server Moteur de base de données utilise SRID0.

Notes

Les types geometry et geography ne peuvent pas être utilisés comme colonnes de table dans le point de terminaison d’analytique SQL dans Microsoft Fabric ou Warehouse dans Microsoft Fabric.

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