Creare, costruire ed eseguire query su istanze geometry
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL in Microsoft Fabric Warehouse nel database SQL di Microsoft Fabric in Microsoft Fabric
Il tipo di dati spaziali planare geometryrappresenta i dati in un sistema di coordinate euclideo (piano). Questo tipo è implementato come tipo di dati Common Language Runtime (CLR) in SQL Server.
Il tipo geometry è predefinito e disponibile in ogni database. È possibile creare colonne di tabella di tipo geometry e operare sui dati geometry nello stesso modo in cui si utilizzano gli altri tipi CLR.
Il tipo di dati geometria (planare) supportato da SQL Server è conforme allo standard Open Geospatial Consortium (OGC) Simple Features for SQL Specification versione 1.1.0.
Per ulteriori informazioni sulle specifiche OGC, vedere quanto riportato di seguito:
OGC Specifications, Simple Feature Access Part 1 - Common Architecture (Specifiche OGC, accesso semplificato alle caratteristiche Parte 1- Architettura comune)
OGC Specifications, Simple Feature Access Part 2 - SQL Options (Specifiche OGC, accesso semplificato alle caratteristiche Parte 2 - Opzioni SQL)
SQL Server supporta un sottoinsieme dello standard GML 3.1 esistente, definito nello schema seguente: https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd.
Creare o costruire una nuova istanza geometry
Creare una nuova istanza geometry da un'istanza esistente
Il tipo di dati geometry offre molti metodi predefiniti che è possibile usare per creare nuove istanze di geometry in base a quelle esistenti.
Per creare un buffer relativo a una geometria
STBuffer (tipo di dati geometry)
BufferWithTolerance (tipo di dati geometry)
Per creare una versione semplificata di una geometria
Reduce (tipo di dati geometry)
Per creare la struttura convessa di una geometria
STConvexHull (tipo di dati geometry)
Per creare una geometria dall'intersezione di due geometrie
STIntersection (tipo di dati geometry)
Per creare una geometria dall'unione di due geometrie
STUnion (tipo di dati geometry)
Per creare una geometria dai punti in cui una non si sovrappone all'altra
STDifference (tipo di dati geometry)
Per creare una geometria dai punti in cui due geometrie non si sovrappongono
STSymDifference (tipo di dati geometry)
Per creare un'istanza Point arbitraria che giace su una geometria esistente
STPointOnSurface (tipo di dati geometry)
Costruire un'istanza geometry dall'input di testo noto
Il tipo di dati geometry fornisce molti metodi predefiniti che generano una geometria dalla rappresentazione WKT OGC (Open Geospatial Consortium). Lo standard WKT è una stringa di testo che consente lo scambio di dati geometrici in formato testuale.
Per costruire qualsiasi tipo di istanza geometry da input WKT
STGeomFromText (tipo di dati geometry)
Per costruire un'istanza di geometria Point dall'input WKT
STPointFromText (tipo di dati geometry)
Per costruire un'istanza MultiPoint di tipo geometry da un input WKT
STMPointFromText (tipo di dati geometry)
Per costruire un'istanza LineString di tipo geometry da un input WKT
STLineFromText (tipo di dati geometry)
Per costruire un'istanza MultiLineString di tipo geometry da un input WKT
STMLineFromText (tipo di dati geometry)
Per costruire un'istanza Polygon di tipo geometry da un input WKT
STPolyFromText (tipo di dati geometry)
Per costruire un'istanza MultiPolygon di tipo geometry da un input WKT
STMPolyFromText (tipo di dati geometry)
Per costruire un'istanza GeometryCollection di tipo geometry da un input WKT
STGeomCollFromText (tipo di dati geometry)
Costruire un'istanza geometry dall'input binario noto
WKB è un formato binario specificato dall'OGC (Open Geospatial Consortium) che consente lo scambio di dati geometry tra un'applicazione client e un database SQL. Le funzioni seguenti accettano input WKB per costruire le geometrie:
Per costruire qualsiasi tipo di istanza geometry da un input WKB
STGeomFromWKB (tipo di dati geometry)
Per costruire un'istanza Point di tipo geometry da un input WKB
STPointFromWKB (tipo di dati geometry)
Per costruire un'istanza MultiPoint di tipo geometry da un input WKB
STMPointFromWKB (tipo di dati geometry)
Per costruire un'istanza LineString di tipo geometry da un input WKB
STLineFromWKB (tipo di dati geometry)
Per costruire un'istanza MultiLineString di tipo geometry da un input WKB
STMLineFromWKB (tipo di dati geometry)
Per costruire un'istanza Polygon di tipo geometry da un input WKB
STPolyFromWKB (tipo di dati geometry)
Per costruire un'istanza MultiPolygon di tipo geometry da un input WKB
STMPolyFromWKB (tipo di dati geometry)
Per costruire un'istanza GeometryCollection di tipo geometry da un input WKB
STGeomCollFromWKB (tipo di dati geometry)
Costruire un'istanza geometry dall'input di testo GML
Il tipo di dati geometry include un metodo che genera un'istanza geometry da GML, una rappresentazione XML di oggetti geometrici. SQL Server supporta un sottoinsieme di GML.
Per costruire qualsiasi tipo di istanza geometry da un input GML
GeomFromGml (tipo di dati geometry)
Restituire testo noto e binario noto da un'istanza geometry
È possibile utilizzare i metodi seguenti per restituire il formato WKT o WKB di un'istanza geometry :
Per restituire la rappresentazione WKT di un'istanza geometry
STAsText (tipo di dati geometry)
ToString (tipo di dati geometry)
Per restituire la rappresentazione WKT di un'istanza geometry, con qualsiasi valore Z e M.
AsTextZM (tipo di dati geometry)
Per restituire la rappresentazione WKB di un'istanza geometry
STAsBinary (tipo di dati geometry)
Per restituire la rappresentazione GML di un'istanza geometry
AsGml (tipo di dati geometry)
Eseguire una query sulle proprietà e sui comportamenti delle istanze geometry
A tutte le istanze geometria sono associate numerose proprietà che possono essere recuperate tramite metodi forniti da SQL Server. Negli argomenti seguenti vengono definiti le proprietà e i comportamenti dei tipi di geometria, nonché i metodi per l'esecuzione di query per ognuno di essi.
Informazioni su validità, tipo di istanza e GeometryCollection
Dopo aver costruito un'istanza geometry , è possibile usare i metodi seguenti per determinare se essa è corretta, per restituire il tipo di istanza o, se si tratta di un'istanza di raccolta, per restituire un'istanza geometry specifica.
Per restituire il tipo di istanza di una geometria
STGeometryType (tipo di dati geometry)
Per determinare se una geometria è un tipo di istanza specificato
InstanceOf (tipo di dati geometry)
Per determinare se un'istanza geometry è corretta per il tipo di istanza
STIsValid (tipo di dati geometry)
Per convertire un'istanza geometry in un'istanza geometry corretta con un tipo di istanza
MakeValid (tipo di dati geometry)
Per restituire il numero delle geometrie in un'istanza GeometryCollection
STNumGeometries (tipo di dati geometry)
Per restituire una specifica geometria in un'istanza GeometryCollection
STGeometryN (tipo di dati geometrici) STGeometryN (tipo di dati geometrici)
Numero di punti
Tutte le istanze geometry non vuote sono costituite da punti. Tali punti rappresentano le coordinate X e Y del piano su cui vengono tracciate le geometrie. Il tipo di datigeometry offre numerosi metodi predefiniti per l'esecuzione di query sui punti di un'istanza.
Per restituire il numero di punti che comprendono un'istanza
STNumPoints (tipo di dati geometry)
Per restituire un punto specifico in un'istanza
STPointN (tipo di dati geometry)
Per restituire un punto arbitrario che si trova in un'istanza
STPointOnSurface (tipo di dati geometry)
Per restituire il punto di inizio di un'istanza
STStartPoint (tipo di dati geometry)
Per restituire l'endpoint di un'istanza
STEndpoint (tipo di dati geometry)
Per restituire la coordinata X di un'istanza Point
STX (tipo di dati geometry)
Per restituire la coordinata Y di un'istanza Point
STY (tipo di dati geometry)
Per restituire il punto centrale geometrico di un'istanza Polygon, CurvePolygon o MultiPolygon
STCentroid (tipo di dati geometry)
Dimensione
Un'istanza geometry non vuota può essere a 0, 1 o 2 dimensioni. Le istanze geometrysenza dimensioni, come Point e MultiPoint, non hanno lunghezza o area. Gli oggetti unidimensionali come LineString, CircularString, CompoundCurvee MultiLineStringhanno una lunghezza. Le istanze bidimensionali come Polygon, CurvePolygone MultiPolygon. Per le istanze vuote verrà indicata una dimensione di -1 e per GeometryCollection verrà indicata un'area dipendente dai tipi del contenuto.
Per restituire la dimensione di un'istanza
STDimension (tipo di dati geometry)
Per restituire la lunghezza di un'istanza
STLength (tipo di dati geometry)
Per restituire l'area di un'istanza
STArea (tipo di dati geometry)
Vuoto
Un'istanza vuota di tipo geometry non contiene punti. La lunghezza delle istanze LineString, CircularString, CompoundCurvee MultiLineString vuote è pari a zero. L'area delle istanze Polygon, CurvePolygone MultiPolygon vuote è pari a 0.
Per determinare se un'istanza è vuota
STIsEmpty (tipo di dati geometry).
Semplice
Affinché il tipo geometry dell'istanza sia semplice, deve soddisfare entrambi questi requisiti:
Ogni figura dell'istanza non deve intersecarsi, salvo agli endpoint.
Le figure dell'istanza non possono intersecarsi tra di loro in un punto non esistente in entrambi i loro limiti.
Nota
Le geometrie vuote sono sempre semplici.
Per determinare se un'istanza è semplice
STIsSimple (tipo di dati geometry).
Limite, interno ed esterno
L' interno di un'istanza geometry è lo spazio occupato dall'istanza e l' esterno è lo spazio non occupato da essa.
Illimite è definito da OGC come segue:
Le istanzePoint e MultiPoint non hanno un limite.
I limitiLineString e MultiLineString boundaries are formed by the start points e 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();
Il limite di un'istanza Polygon o MultiPolygon è il set dei suoi anelli.
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();
Per restituire il limite di un'istanza
STBoundary (tipo di dati geometry)
Envelope
L' envelope di un'istanza geometry , nota anche come rettangolo di selezioneè il rettangolo allineato all'asse formato dalle coordinate minime e massime (X, Y) dell'istanza.
Per restituire l'envelope di un'istanza
STEnvelope (tipo di dati geometry)
Chiusura
Un'istanza geometrychiusa è una figura i cui punti di inizio e di fine corrispondono. Le istanzePolygon sono considerate chiuse. Le istanzePoint non sono considerate chiuse.
Un anello è un'istanza LineString semplice chiusa.
Per determinare se un'istanza è chiusa
STIsClosed (tipo di dati geometry)
Per determinare se un'istanza è un anello
STIsRing (tipo di dati geometry)
Per restituire l'anello esterno di un'istanza Polygon
STExteriorRing (tipo di dati geometry)
Per restituire il numero di anelli interni in un'istanza Polygon
STNumInteriorRing (tipo di dati geometry)
Per restituire un anello interno specificato di un'istanza Polygon
STInteriorRingN (tipo di dati geometry)
ID riferimento spaziale (SRID)
L'identificatore SRID specifica il sistema di coordinate in cui è rappresentata l'istanza geometry . Due istanze con identificatori SRID diversi non possono essere confrontate.
Per impostare o restituire l'identificatore SRID di un'istanza
STSrid (tipo di dati geometry)
Nota
Questa proprietà può essere modificata.
Determinare le relazioni tra istanze geometry
Il tipo di dati geometry offre molti metodi predefiniti che è possibile usare per determinare relazioni tra due istanze geometry .
Per determinare se due istanze includono lo stesso punto impostato
STEquals (tipo di dati geometry)
Per determinare se due istanze sono disgiunte
STDisjoint (tipo di dati geometry)
Per determinare se due istanze si intersecano
STIntersects (tipo di dati geometry)
Per determinare se due istanze entrano in contatto
STTouches (tipo di dati geometry)
Per determinare se due istanze si sovrappongono
STOverlaps (tipo di dati geometry)
Per determinare se due istanze si incrociano
STCrosses (tipo di dati geometry)
Per determinare se un'istanza è all'interno dell'altra
STWithin (tipo di dati geometry)
Per determinare se un'istanza contiene l'altra
STContains (tipo di dati geometry)
Per determinare se un'istanza si sovrappone all'altra
STOverlaps (tipo di dati geometry)
Per determinare se due istanze sono collegate a livello spaziale
STRelate (tipo di dati geometry)
Per determinare la distanza più breve tra punti in due geometrie
STDistance (tipo di dati geometry)
Istanze geometry Default to zero SRID
L'identificatore SRID predefinito per le istanze geometry in SQL Server è 0
. Con i dati spaziali geometry lo specifico identificatore SRID dell'istanza spaziale non deve eseguire i calcoli. Di conseguenza le istanze possono risiedere nello spazio planare indefinito. Per indicare uno spazio planare non definito nei calcoli dei metodi del tipo di dati geometry, SQL Server motore di database usa SRID 0
.
Osservazioni:
I tipi geometry e geography non possono essere usati come colonne di tabella nell'endpoint di analisi SQL in Microsoft Fabric o Warehouse in Microsoft Fabric.
Esempi
Nei due esempi seguenti viene illustrato come aggiungere ed eseguire query su dati di tipo geometry.
Esempio A.
In questo esempio viene creata una tabella con una colonna di identità e una colonna geometry
GeomCol1
. Una terza colonna effettua il rendering della colonna geometry
nella rappresentazione Well-Known Text (WKT) OGC (Open Geospatial Consortium) e utilizza il metodo STAsText()
. Vengono quindi inserite due righe: in una riga è contenuta un'istanza LineString
di geometry
e in una seconda è contenuta un'istanza 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
Esempio B.
In questo esempio viene usato il metodo STIntersection()
per restituire i punti in cui le due istanze geometry
inserite in precedenza si intersecano.
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();