Tipi di dati spaziali
Esistono due tipi di dati spaziali. Nel tipo di dati geometry sono supportati dati planari o euclidei (terra piatta). Il tipo di dati geometry è conforme a Open Geospatial Consortium (OGC) Simple Features for SQL Specification versione 1.1.0.
Inoltre, SQL Server supporta il tipo di dati geography che archivia dati ellissoidali (terra rotonda), ad esempio coordinate di latitudine e longitudine GPS.
I tipi di dati geometry e geography supportano undici oggetti dati spaziali o tipi di istanza. Tuttavia, solo per sette di questi tipi di istanza è possibile creare istanze; è possibile creare e utilizzare queste istanze (o crearne un'istanza) in un database. Queste istanze derivano determinate proprietà dai relativi tipi di dati padre che consentono di distinguerle come Points, LineStrings, Polygons o come più istanze geometry o geography in un GeometryCollection.
Nella figura seguente viene illustrata la gerarchia geometry sulla quale si basano i tipi di dati geometry e geography. I tipi per cui è possibile creare istanze di geometry e geography sono indicati in blu.
Come indica la figura, i sette tipi per cui è possibile creare istanze dei tipi di dati geometry e geography sono Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon e GeometryCollection. I tipi geometry e geography sono in grado di riconoscere un'istanza specifica purché si tratti di un'istanza correttamente formata, anche se non definita in modo esplicito. Ad esempio, se si definisce un'istanza Point utilizzando in modo esplicito il metodo STPointFromText(), geometry e geography riconoscono l'istanza come Point, purché il formato dell'input del metodo sia corretto. Se si definisce la stessa istanza utilizzando il metodo STGeomFromText(), entrambi i tipi di dati geometry e geography riconoscono l'istanza come Point.
Per ulteriori informazioni su queste istanze, vedere i seguenti argomenti:
Differenze tra i due tipi di dati
I due tipi di dati spaziali si comportano spesso in modo simile, tuttavia esistono alcune differenze fondamentali nel modo in cui i dati vengono archiviati e modificati.
Definizione dei bordi di collegamento
I dati di definizione per i tipi LineString e Polygon sono solo vertici. Il bordo di collegamento tra due vertici in un tipo geometrico è una linea retta. Tuttavia, il bordo di collegamento tra due vertici in un tipo geografico è un corto arco di grande ellissi tra i due vertici. Una grande ellisse è l'intersezione dell'ellissoide con un piano attraverso il centro e un arco di grande ellissi è un segmento di arco sulla grande ellissi.
Misurazioni nei tipi di dati spaziali
Nel sistema planare, o terra piatta, le misurazioni delle distanze e delle aree vengono fornite nella stessa unità di misurazione delle coordinate. Utilizzando il tipo di dati geometry, la distanza tra (2, 2) e (5, 6) è 5 unità, indipendentemente dalle unità utilizzate.
Nel sistema ellissoidale, o terra rotonda, le coordinate sono fornite in gradi di latitudine e longitudine. Tuttavia, le lunghezze e le aree sono misurate generalmente in metri e metri quadrati, sebbene la misurazione possa dipendere dall'identificatore di riferimento spaziale (SRID) dell'istanza geography. L'unità di misurazione più comune per il tipo di dati geography è metri.
Orientamento dei dati spaziali
Nel sistema planare, l'orientamento dell'anello di un poligono non è un fattore di particolare rilevanza. Ad esempio, un poligono descritto da ((0, 0), (10, 0), (0, 20), (0, 0)) è identico al poligono descritto da ((0, 0), (0, 20), (10, 0), (0, 0)). OGC Simple Features for SQL Specification non indica un ordinamento dell'anello e SQL Server non impone tale ordinamento.
In un sistema ellissoidale, un poligono non ha significato, o è ambiguo, senza un orientamento. Ad esempio, un anello intorno all'equatore descrive l'emisfero nord o sud? Se si utilizza il tipo di dati geography per archiviare l'istanza spaziale, è necessario specificare l'orientamento dell'anello e descrivere accuratamente il percorso dell'istanza.
SQL Server 2008 posiziona le restrizioni seguenti sull'utilizzo del tipo di dati geography:
Ogni istanza geography deve essere adattata in un solo emisfero. Non è possibile archiviare oggetti spaziali con dimensioni maggiori di un emisfero.
Qualsiasi istanza geography di una rappresentazione Well-Known Text (WKT) o Well-Known Binary (WKB) OCG che produca un oggetto più grande di un emisfero genera una ArgumentException.
I metodi del tipo di dati geography che richiedono l'input di due istanze geography, ad esempio STIntersection(), STUnion(), STDifference() e STSymDifference(), restituiranno Null se i risultati dai metodi non si adattano a un solo emisfero. Anche STBuffer() restituirà Null se l'output supera un singolo emisfero.
Anelli interni ed esterni non rilevanti nel tipo di dati geografico
In OGC Simple Features for SQL Specification vengono trattati anelli esterni e interni, ma questa distinzione non ha molto senso per il tipo di dati SQL Servergeography: è possibile scegliere qualsiasi tipo di poligono come anello esterno.
Per ulteriori informazioni sulle specifiche OGC, vedere quanto riportato di seguito:
OGC Specifications, Simple Feature Access Part 1 - Common Architecture
OGC Specifications, Simple Feature Access Part 2 - SQL Options