Condividi tramite


Introduzione al tipo di dati geografico

Il tipo di dati spaziali di geografia geography viene implementato come un tipo di dati Common Language Runtime (CLR) .NET in SQL Server. Questo tipo rappresenta i dati in un sistema di coordinate di tipo terra rotonda. Il tipo di dati SQL Servergeography consente di archiviare dati ellissoidali (terra rotonda), ad esempio coordinate di latitudine e longitudine GPS.

Registrazione di un tipo geografia

Il tipo geography è predefinito e disponibile in ogni database. È possibile creare colonne della tabella di tipo geography e operare sui dati geography nello stesso modo in cui verrebbero utilizzati gli altri tipi forniti dal sistema.

Esempi

Gli esempi seguenti mostrano come aggiungere ed eseguire query sui dati di geografia. Nel primo esempio viene creata una tabella con una colonna di identità e una colonna geographyGeogCol1. Una terza colonna effettua il rendering della colonna geography nella rappresentazione Well-Known Text (WKT) OGC (Open Geospatial Consortium) e utilizza il metodo STAsText(). Vengono quindi inserite due righe: una contiene un'istanza LineString di geography e la seconda contiene 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 si utilizza 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();