Creare, Costruire e Istanze geografiche di Query
Il tipo di dati spaziali geografici, geography, rappresenta i dati in un sistema di coordinate terrestri. In SQL Server è implementato come tipo di dati CLR (Common Language Runtime) .NET. Il tipo di dati geography di SQL Server consente di archiviare dati ellissoidali (terra rotonda), come ad esempio coordinate di latitudine e longitudine GPS.
Il tipo geography è predefinito e disponibile in ogni database. È possibile creare colonne di tabella di tipo geography e utilizzare dati geography nello stesso modo in cui verrebbero utilizzati gli altri tipi forniti dal sistema.
Contenuto dell'argomento
Creazione o costruzione di una nuova istanza geografica
Creazione di una nuova istanza geografica da un'istanza esistente
Costruzione di un'istanza geografica dall'input WKT (well-known text)
Costruzione di un'istanza geografica dall'input WKB (well-known binary)
Costruzione di un'istanza geografica dall'input di testo GML
Restituzione di WKT e WKB da un'istanza geografica
Esecuzione di query sulle proprietà e i comportamenti delle istanze geografiche
Informazioni sulla validità, sul tipo di istanza e su GeometryCollection
Numero di punti
Dimensione
Vuoto
Chiusura
Identificatore SRID
Determinazione delle relazioni esistenti tra istanze geografiche
Le istanze geografiche devono utilizzare l'identificatore SRID supportato
Esempi
[TORNA ALL'INIZIO]
Creazione o costruzione di una nuova istanza geografica
Creazione di una nuova istanza geografica da un'istanza esistente
Il tipo di dati geography fornisce diversi metodi predefiniti da utilizzare per creare nuove istanze geography in base a quelle esistenti.
Per creare un buffer relativo a una geografia
STBuffer (tipo di dati geography)Per creare un buffer relativo a una geografia, consentendo una certa tolleranza
BufferWithTolerance (tipo di dati geography)Per creare una geografia dall'intersezione di due istanze di geografia
STIntersection (tipo di dati geography)Per creare una geografia dall'unione di due istanze di geografia
STUnion (tipo di dati geography)Per creare una geografia partendo dai punti in cui una non si sovrappone all'altra
STDifference (tipo di dati geography)
Costruzione di un'istanza geografica dall'input WKT (well-known text)
Il tipo di dati geography fornisce diversi metodi predefiniti che generano una geografia dalla rappresentazione WKT Open Geospatial Consortium (OGC). Lo standard WKT è una stringa di testo che consente ai dati geografici di essere scambiati in formato testuale.
Per costruire qualsiasi tipo di istanza geografica dall'input WKT
STGeomFromText (tipo di dati geography)Per costruire un'istanza geografica Point dall'input WKT
STPointFromText (tipo di dati geography)Per costruire un'istanza geografica MultiPoint dall'input WKT
STMPointFromText (tipo di dati geography)Per costruire un'istanza geografica LineString dall'input WKT
STLineFromText (Tipo di dati geografico)Per costruire un'istanza geografica MultiLineString dall'input WKT
STMLineFromText (tipo di dati geography)Per costruire un'istanza geografica Polygon dall'input WKT
STPolyFromText (tipo di dati geography)Per costruire un'istanza geografica MultiPolygon dall'input WKT
STMPolyFromText (tipo di dati geography)Per costruire un'istanza geografica GeometryCollection dall'input WKT
STPGeomCollFromText (tipo di dati geography)
Costruzione di un'istanza geografica dall'input WKB (well-known binary)
WKB è un formato binario specificato da OGC che consente di scambiare dati Geography tra un'applicazione client e un database SQL. Le seguenti funzioni accettano l'input WKB per costruire le istanze geografiche:
Per costruire qualsiasi tipo di istanza geografica dall'input WKB
STGeomFromWKB (tipo di dati geography)Per costruire un'istanza geografica Point dall'input WKB
STPointFromWKB (tipo di dati geography)Per costruire un'istanza geografica MultiPoint dall'input WKB
STMPointFromWKB (tipo di dati geography)Per costruire un'istanza geografica LineString dall'input WKB
STLineFromWKB (tipo di dati geography)Per costruire un'istanza geografica MultiLineString dall'input WKB
STMLineFromWKB (tipo di dati geography)Per costruire un'istanza geografica Polygon dall'input WKB
STPolyFromWKB (tipo di dati geography)Per costruire un'istanza geografica MultiPolygon dall'input WKB
STMPolyFromWKB (tipo di dati geography)Per costruire un'istanza geografica GeometryCollection dall'input WKB
STGeomCollFromWKB (tipo di dati geography)STGeomCollFromWKB (tipo di dati geography)
Costruzione di un'istanza geografica dall'input di testo GML
Il tipo di dati geography fornisce un metodo che consente di generare un'istanza geography da GML. Si tratta di una rappresentazione in formato XML di un'istanza geography. In SQL Server è supportato un subset di GML.
Per ulteriori informazioni su Geography Markup Language (GML), vedere la specifica OGC OGC Specifications, Geography Markup Language (informazioni in lingua inglese).
- Per costruire qualsiasi tipo di istanza geografica dall'input GML
GeomFromGML (tipo di dati geography)
Restituzione di WKT e WKB da un'istanza geografica
È possibile utilizzare i metodi seguenti per restituire il formato WKT o WKB di un'istanza geography:
Per restituire la rappresentazione WKT di un'istanza di geografia
STAsText (tipo di dati geography)Per restituire la rappresentazione WKT di un'istanza di geografia, con qualsiasi valore Z e M.
AsTextZM (tipo di dati geography)Per restituire la rappresentazione WKB di un'istanza geografica
STAsBinary (tipo di dati geography)Per restituire la rappresentazione GML di un'istanza geografica
AsGml (tipo di dati geography)
Esecuzione di query sulle proprietà e i comportamenti delle istanze geografiche
A tutte le istanze geography sono associate diverse proprietà che possono essere recuperate tramite metodi forniti da SQL Server. Negli argomenti seguenti vengono definite le proprietà e i comportamenti dei tipi di geografia, nonché i metodi per l'esecuzione di query per ognuno di essi.
Informazioni sulla validità, sul tipo di istanza e su GeometryCollection
Dopo aver costruito un'istanza geography, è possibile utilizzare i seguenti metodi per restituire il tipo di istanza oppure, se si tratta di un'istanza GeometryCollection, restituire un'istanza geography specifica.
Per restituire il tipo di istanza di una geografia
STGeometryType (tipo di dati geography)Per determinare se una geografia è un tipo di istanza specificato
InstanceOf (tipo di dati geography)Per determinare se il formato di un'istanza di geografia è corretto per il tipo di istanza
STNumGeometries (tipo di dati geography)Per restituire una specifica geografia in un'istanza GeometryCollection
STGeometryN (tipo di dati geography)STGeometryN (tipo di dati geography)
Numero di punti
Tutte le istanze geography non vuote sono costituite da punti, che rappresentano le coordinate di latitudine e longitudine terrestri sulle quali vengono tracciate le istanze geography. Il tipo di dati geography fornisce 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 geography)Per restituire un punto specifico in un'istanza
STPointN (tipo di dati geometry)Per restituire il punto di inizio di un'istanza
STStartPoint (tipo di dati geography)Per restituire il punto di fine di un'istanza
STEndpoint (tipo di dati geography)
Dimensione
Un'istanza geography non vuota può essere a 1 o 2 dimensioni o senza dimensioni. Le istanze geography senza dimensioni, ad esempio Point e MultiPoint non dispongono di lunghezza o area. Gli oggetti unidimensionali, ad esempio LineString, CircularString, CompoundCurve e MultiLineString, dispongono della lunghezza. Le istanze bidimensionali, ad esempio Polygon, CurvePolygon e MultiPolygon, dispongono di area e lunghezza. Le istanze vuote indicano una dimensione di -1 e GeometryCollection indica le dimensioni massime del contenuto.
Per restituire la dimensione di un'istanza
STDimension (tipo di dati geography)Per restituire la lunghezza di un'istanza
STLength (tipo di dati geography)Per restituire l'area di un'istanza
STArea (tipo di dati geography)
Vuota
Un'istanza geography vuota non dispone di punti. La lunghezza delle istanze vuote LineString, CircularString, CompoundCurve e MultiLineString è 0. L'area delle istanze vuote Polygon, CurvePolygon and MultiPolygon è 0.
- Per determinare se un'istanza è vuota
STIsEmpty (tipo di dati geography)
Chiusura
Un'istanza geography chiusa è una figura i cui punti di inizio e di fine sono identici. Le istanze Polygon sono considerate chiuse. Le istanze Point non sono considerate chiuse.
Un anello è un'istanza LineString semplice chiusa.
Per determinare se un'istanza è chiusa
STIsClosed (tipo di dati geography)Per restituire il numero di anelli in un'istanza Polygon
NumRings (tipo di dati geography)Per restituire un anello specificato di un'istanza di geografia
RingN (tipo di dati geography)
Identificatore SRID
L'identificatore SRID specifica in quale sistema di coordinate ellissoidali è rappresentata l'istanza geography. Non è possibile confrontare due istanze geography con identificatori SRID diversi.
- Per impostare o restituire l'identificatore SRID di un'istanza
STSrid (tipo di dati geography)
Questa proprietà può essere modificata.
Determinazione delle relazioni esistenti tra istanze geografiche
Il tipo di dati geography fornisce numerosi metodi predefiniti da utilizzare per determinare le relazioni esistenti tra due istanze geography.
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 il punto o i punti in cui due istanze si intersecano
STIntersection (tipo di dati geography)Per determinare la distanza più breve tra punti in due istanze di geografia
STDistance (tipo di dati geometry)Per determinare la differenza in termini di punti tra due istanze di geografia
STDifference (tipo di dati geography)Per dedurre la differenza simmetrica o i punti univoci di un'istanza geografica a confronto con un'altra
STSymDifference (tipo di dati geography)
Le istanze geografiche devono utilizzare l'identificatore SRID supportato
In SQL Server sono supportati gli identificatori SRID basati sugli standard EPSG. È necessario utilizzare un identificatore SRID supportato SQL Server per le istanze geography se si eseguono calcoli o si utilizzano metodi con dati spaziali di geografia. L'identificatore SRID deve corrispondere a uno di quelli visualizzati nella vista del catalogo sys.spatial_reference_systems. Come indicato in precedenza, quando si eseguono i calcoli sui dati spaziali utilizzando il tipo di dati geography i risultati dipenderanno dal tipo di ellissoide utilizzato nella creazione dei dati, in quanto a ogni ellissoide è assegnato un identificatore SRID specifico.
SQL Server utilizza l'identificatore predefinito SRID di 4326., che esegue il mapping al sistema di riferimento spaziale WHS 84 in caso si utilizzino metodi nelle istanze geography. Se si utilizzano dati da un sistema di riferimento spaziale diverso da WGS 84 (o SRID 4326), sarà necessario determinare lo specifico identificatore SRID per i dati spaziali geografici.
Esempi
Negli esempi seguenti viene illustrato come aggiungere ed eseguire query su dati geography.
Nel primo esempio viene creata una tabella con una colonna di Identity e una colonna geographyGeogCol1. Una terza colonna effettua il rendering della colonna geography nella relativa 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 geography 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), GeogCol1 geography, GeogCol2 AS GeogCol1.STAsText() ); GO INSERT INTO SpatialTable (GeogCol1) VALUES (geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326)); INSERT INTO SpatialTable (GeogCol1) VALUES (geography::STGeomFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326)); GO
Nel secondo esempio viene utilizzato il metodo STIntersection() per restituire i punti dove si intersecano le due istanze geography inserite in precedenza.
DECLARE @geog1 geography; DECLARE @geog2 geography; DECLARE @result geography; SELECT @geog1 = GeogCol1 FROM SpatialTable WHERE id = 1; SELECT @geog2 = GeogCol1 FROM SpatialTable WHERE id = 2; SELECT @result = @geog1.STIntersection(@geog2); SELECT @result.STAsText();