Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le type de données spatiales planaire, geometryreprésente des données dans un système de coordonnées euclide (plat). Ce type est implémenté en tant que type de données CLR (Common Language Runtime) dans SQL Server.
Le geometry type est prédéfini et disponible dans chaque base de données. Vous pouvez créer des colonnes de table de type geometry et traiter des données geometry de la même manière que vous utiliseriez les types CLR.
Le geometry type de données (planar) pris en charge par SQL Server est conforme aux fonctionnalités simples OGC (Open Geospatial Consortium) pour la spécification SQL version 1.1.0.
Pour plus d’informations sur les spécifications OGC, consultez les rubriques suivantes :
Spécifications OGC, Accès aux fonctionnalités simples partie 1 - Architecture commune
Spécifications OGC, Accès simple aux fonctionnalités, partie 2 - Options SQL
SQL Server prend en charge un sous-ensemble de la norme GML 3.1 existante 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 de géométrie
Création d’une instance geometry à partir d’une instance existante
Le geometry type de données fournit de nombreuses méthodes intégrées que vous pouvez utiliser pour créer de nouvelles geometry instances 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 coque convexe d’une géométrie
STConvexHull (type de données géométrie)
Pour créer une géométrie à partir de l’intersection de deux géométries
STIntersection (type de données géométrie)
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 ne chevauche pas une autre
STDifference (type de données géométrie)
Pour créer une géométrie à partir des points où deux géométries ne se chevauchent pas
STSymDifference (type de données géométrie)
Pour créer une instance de point arbitraire qui se trouve sur une géométrie existante
STPointOnSurface (type de données geometry)
Construction d'une instance géométrique depuis une entrée de texte Well-Known
Le geometry type de données fournit plusieurs méthodes intégrées qui génèrent une géométrie à partir de la représentation WKT (Open Geospatial Consortium) (OGC). La norme WKT est une chaîne de texte qui permet d’échanger des données géométriques sous forme textuelle.
Pour construire n’importe quel type d’instance de géométrie à partir d’une entrée WKT
STGeomFromText (type de données Géométrie)
Analyse (type de données geometry)
Pour construire une instance de Point de géométrie à partir d’une entrée WKT
STPointFromText (type de données geometry)
Pour construire une instance de géométrie MultiPoint à partir d'une entrée WKT
STMPointFromText (Type de données de géométrie)
Pour construire une instance de géométrie LineString à 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 géométrie)
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 binaire Well-Known
WKB est un format binaire spécifié par l’Open Geospatial Consortium (OGC) qui permet d’échanger des geometry données 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 n’importe quel type d’instance de géométrie à partir d’une entrée WKB
STGeomFromWKB (type de données Géométrie)
Pour construire une instance de Point de géométrie à partir d’une entrée WKB
STPointFromWKB (type de données geometry)
Pour construire une instance de géométrie MultiPoint à partir d’une entrée WKB
STMPointFromWKB (type de données géométrie)
Pour construire une instance de géométrie LineString à partir d’une entrée WKB
STLineFromWKB (type de données géométrique)
Pour construire une instance de géométrie MultiLineString à 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 géométrie)
Pour construire une instance de géométrie MultiPolygon à partir d’une entrée WKB
STMPolyFromWKB (type de données géométrie)
Pour construire une instance GeometryCollection à partir d’une entrée WKB
STGeomCollFromWKB (type de données géométrie)
Construction d’une instance geometry à partir d’une entrée de texte GML
Le geometry type de données fournit une méthode qui génère une geometry instance à partir de GML, une représentation XML d’objets géométriques. SQL Server prend en charge un sous-ensemble de GML.
Pour construire n’importe quel type d’instance géométrique à partir d’une entrée GML
GeomFromGml (type de données géométrie)
Renvoi de Well-Known texte et de Well-Known binaire à partir d'une instance de géométrie
Vous pouvez utiliser les méthodes suivantes pour retourner le format WKT ou WKB d’une geometry instance :
Pour retourner la représentation WKT d’une instance de géométrie
STAsText (type de données geometry)
ToString (type de données geometry)
Pour retourner la représentation WKT d’une instance de géométrie, y compris les valeurs Z et M
AsTextZM (type de données geometry)
Pour retourner la représentation WKB d’une instance de géométrie
STAsBinary (type de données geometry)
Pour retourner une représentation GML d’une instance geometry
AsGml (type de données geometry)
Consultation des propriétés et des comportements des instances de géométrie
Toutes les geometry instances ont un certain nombre de propriétés qui peuvent être récupérées par le biais de méthodes que SQL Server fournit. Les rubriques suivantes définissent les propriétés et les comportements des types géométriques, ainsi que les méthodes d’interrogation de chacune d’elles.
Informations sur la Validité, le Type d’Instance et la Collection de Géométrie
Une fois qu’une geometry instance est construite, vous pouvez utiliser les méthodes suivantes pour déterminer s’il est bien formé, retourner le type d’instance ou, s’il s’agit d’une instance de collection, retourner une instance spécifique geometry .
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 géométrie)
Pour déterminer si une instance geometry est bien formée pour son type d’instance
STIsValid (type de données geometry)
Pour convertir une instance de géométrie en une instance bien formée 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 de géométries.
STGeometryN (type de données géométrie)STGeometryN (type de données géométrie)
Nombre de points
Toutes les instances sansmpty geometry sont composées de points. Ces points représentent les coordonnées X et Y 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 se trouve 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 de point
STX (type de données geometry)
Pour retourner la coordonnée Y d’une instance de point
STY
Pour renvoyer le point central géométrique d’une instance Polygon, CurvePolygon ou MultiPolygon
STCentroid
Dimension
Une instance nonempty geometry peut être de 0, 1 ou 2 dimensions. Les objets de dimension zéro, tels que Point et MultiPoint, n'ont pas de longueur ou de surface. Les objets unidimensionnels, tels que LineString, CircularString, CompoundCurve, et MultiLineString, ont une longueur. Les instances à deux dimensions, telles que Polygon, CurvePolygonet MultiPolygon, ont une zone et une longueur. Les instances vides signalent une dimension de -1, et une GeometryCollection zone dépend des types de son contenu.
Pour retourner la dimension d’une instance
STDimension
Pour retourner la longueur d’une instance
STLength
Pour retourner la zone d’une instance
STArea
Vide
Une instance videgeometry n’a aucun point. La longueur des instances vides LineString, CircularString, CompoundCurve, et MultiLineString est de zéro. La superficie des instances vides Polygon, CurvePolygon, et MultiPolygon est de 0.
Pour déterminer si une instance est vide
STIsEmpty.
Simple
Pour qu’une geometry instance soit simple, elle doit répondre aux deux exigences suivantes :
Chaque figure de l’instance ne doit pas se croiser, à l’exception de ses points de terminaison.
Aucune des deux figures de l’instance ne peut se croiser à un point qui n’est pas dans les deux 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 geometry instance est l’espace occupé par l’instance, et l’extérieur est l’espace non occupé.
La limite est définie par l’OGC comme suit :
PointetMultiPointles instances n’ont pas de limite.LineStringetMultiLineStringles limites sont formées par les points de départ et les points de terminaison, en supprimant ceux qui se produisent 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
Enveloppe
L’enveloppe d’une geometry instance, é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 renvoyer l’enveloppe d’une instance
STEnvelope
Clôture
Une instance ferméegeometry est une figure dont les points de départ et les points de terminaison sont identiques.
Polygon les instances sont considérées comme fermées.
Point les instances ne sont pas fermées.
Un anneau est une instance simple et fermée LineString .
Pour déterminer si une instance est fermée
STIsClosed
Pour déterminer si une instance est un anneau
STIsRing
Pour renvoyer l’anneau extérieur d’une instance Polygon
STExteriorRing
Pour renvoyer le nombre d’anneaux intérieurs dans un polygone
STNumInteriorRing
Pour renvoyer un anneau intérieur spécifié d’un polygone
STInteriorRingN
ID de référence spatiale (SRID)
L’ID de référence spatiale (SRID) est un identificateur spécifiant le système de coordonnées dans lequel l’instance geometry est représentée. Deux instances avec des SRID différents sont incomparables.
Pour définir ou retourner le SRID d’une instance
STSrid
Cette propriété peut être modifiée.
Détermination des relations entre les instances de géométrie
Le geometry type de données fournit de nombreuses méthodes intégrées que vous pouvez utiliser pour déterminer les relations entre deux geometry instances.
Pour déterminer si deux instances comprennent le même jeu 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 se trouve dans une autre
STWithin
Pour déterminer si une instance contient une autre
STContains
Pour déterminer si une instance chevauche une autre
STOverlaps
Pour déterminer si deux instances sont liées spatialement
STRelate
Pour déterminer la distance la plus courte entre les points dans deux géométries
STDistance
Les instances de géométrie sont définies par défaut avec un SRID de zéro.
Le SRID par défaut pour geometry les instances dans SQL Server est 0. Avec geometry les données spatiales, le SRID spécifique de l’instance spatiale n’est pas nécessaire pour effectuer des calculs. Par conséquent, les instances peuvent résider dans un espace planaire non défini. Pour indiquer un espace planaire non défini dans les calculs des méthodes de type de données, le moteur de base de geometry données SQL Server utilise SRID 0.
Exemples
Les deux exemples suivants montrent comment ajouter et consulter des données géométriques.
Le premier exemple crée une table avec une colonne d’identité et une
geometrycolonneGeomCol1. Une troisième colonne affiche lageometrycolonne dans sa représentation OGC (Open Geospatial Consortium) Well-Known Text (WKT) et utilise laSTAsText()méthode. Deux lignes sont ensuite insérées : une ligne contient uneLineStringinstancegeometryet une ligne contient unePolygoninstance.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)); GOLe deuxième exemple utilise la
STIntersection()méthode pour retourner les points où les deux instances précédemment inséréesgeometryse 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();