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 :
OGC Specifications, Simple Feature Access Part 1 - Common Architecture (en anglais)
OGC Specifications, Simple Feature Access Part 2 – SQL Options (en anglais)
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.
Pour créer une mémoire tampon autour d'une géométrie
STBuffer (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)
[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.
Pour construire tout type d'instance geometry à partir d'une entrée WKT
STGeomFromText (type de données geometry)Pour construire une instance Point geometry à partir d'une 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)
[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 :
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)
[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.
- Pour construire tout type d'instance geometry à partir d'une entrée GML
GeomFromGml (type de données geometry)
[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 :
Pour retourner la représentation WKT d'une instance geometry
STAsText (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)
[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.
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)
[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.
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
STPointNPour retourner un point arbitraire qui repose sur une instance
STPointOnSurfacePour retourner le point de départ d'une instance
STStartPointPour retourner le point de terminaison d'une instance
STEndpointPour 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
STYPour retourner le point central géométrique d'une instance Polygone, CurvePolygon ou MultiPolygon
STCentroid
[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
STDimensionPour retourner la longueur d'une instance
STLengthPour 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
STIsClosedPour déterminer si une instance est un anneau
STIsRingPour retourner l'anneau extérieur d'une instance Polygon
STExteriorRingPour retourner le nombre d'anneaux intérieurs dans un Polygon
STNumInteriorRingPour 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
STEqualsPour déterminer si deux instances sont disjointes
STDisjointPour déterminer si deux instances se croisent
STIntersectsPour déterminer si deux instances se touchent
STTouchesPour déterminer si deux instances se chevauchent
STOverlapsPour déterminer si deux instances se croisent
STCrossesPour déterminer si une instance est dans une autre instance
STWithinPour déterminer si une instance en contient une autre
STContainsPour déterminer si une instance en chevauche une autre
STOverlapsPour déterminer si deux instances sont liées spatialement
STRelatePour 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]