Présentation du type de données geography

La type de données spatiales géographiques, geography, est implémenté en tant que type de données CLR (Common Language Runtime) .NET dans SQL Server. Ce type représente des données dans un système de coordonnées de monde sphérique. Le type de données SQL Servergeography stocke des données ellipsoïdes (monde sphérique), telles que des coordonnées de latitude et de longitude GPS.

Inscription du type geography

Le type geography est prédéfini et disponible dans chaque base de données. Vous pouvez créer des colonnes de table de type geography et opérer sur les données geography comme vous le feriez avec d'autres types fournis par le système.

Exemples

Les exemples suivants montrent comment ajouter et interroger des données géographiques. Le premier exemple crée une table avec une colonne d'identité et une colonne geographyGeogCol1. Une troisième colonne restitue la colonne geography dans sa représentation OGC (Open Geospatial Consortium) WKT (Well-Known Text) et utilise la méthode STAsText(). Deux lignes sont ensuite insérées : une ligne contient une instance LineString de geography et une ligne contient une instance 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

Le deuxième exemple utilise la méthode STIntersection() pour retourner les points où les deux instances geography précédemment insérées se croisent.

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();