Données de type Geography

SQL Server 2008 apporte dans son lot de nouveautés les données de type de Geography.
Cet article aura pour but de vous décrire ce type de donnée et vous guider dans son utilisation.

La MSDN a dit …

Les données de type Geography sont utilisées pour les cartes prenant en compte le fait que la Terre soit ronde contrairement au type Geometry qui fait référence à une vision plate du monde. On a donc déja à l’esprit une idée de globe VS planisphère.

Concentrons nous donc sur le Globe…

Pour géolocaliser nous utilisons des informations : la latitude et la longitude.

Pour rappel :
Latitude -> lignes verticales

Longitude -> lignes horizontales

Prenons les coordonnées d’une île  21° 06′ S, 55° 36′ E

On peut comprendre qu’on parle de la latitude 21° et de la longitude 55°. Les autres nombres concernent les minutes.

En effet lorsque l’on donne des coordonnées géographiques on peut utiliser 3 formats :

  • DMS Degré:Minute:Seconde -> 21 ° 06 ′ 00 ″ ,  55 ° 36 ′ 00 ″
  • DM Degré:Minute -> 21 ° 06 ′ ,  55 ° 36 ′ 
  • DD Degré décimal -> 21 ° , 55 ° 

L’utilisation des point cardinaux  sont possibles Nord,Sud : indiquent les directions par rapports à l’équateur (-90 à 90 degré), le Nord étant positif.

Les point cardinaux Est,Ouest : indiquent les directions par rapport au fameux méridien de Greenwich (-180 à 180 degré), l’Est étant positif.

Des calculs…

On a vu que les coordonnées possèdent différents formats,  ce n’est qu’une question de précision.

Pour utiliser les données géographiques il faut préalablement passer du format DMS ou DM pour avoir les valeurs exactes de type décimal. 

Il faut alors convertir grâce à  des calculs.

Exemple :

Prenons ces coordonnées   49 ° 30 ′ 00 ″ – 123 ° 30 ′ 00 ″
Calcul Longitude : 49+30/60+00/3600=49,5
Calcul Latitude: – 123 + 30/60 +00/3600= -123,5

Dans le cas de notre île dont les coordonnées sont 21° 06′ S, 55° 36′ E on a en plus les points cardinaux il faut donc ajuster les signes (N+; S-; E+; O-) 
Latitude
21° 06′ S –>21+6/60=21,1
Longitude
55° 36′ E –> 55+36/60 =55,6

Vous pouvez vérifier vos coordonnées sur Google map et Bing map.

Bilan

Avant d’utiliser le type Geography, il faut donc prendre connaissance :

  •  Du format de données que vous possédez
  • L’utilisation des points cardinaux pour changer les signes
  • La précision en fonction de l’échelle que vous allez utiliser (Vue mondiale, Vue nationale, Vue régionale  etc..)

Et de savoir bien évidemment comment sont stockées ces informations dans les systèmes que vous utilisez.

La plupart du temps on a tout simplement deux colonnes Latitude  et Longitude dans une table de type Location. Au pire des cas il va falloir chercher sur le net un référentiel de localisation qu’il faudra intégrer à votre système.

La pratique

Une fois qu’on sait où sont les données  et comment  elles sont définies, on peut passer du côté de l’utilisation de ces données.

Avant tout créer ou modifier la table qui va contenir les informations en y ajoutant une colonnes de type Geography.

Il faut maintenant charger vos données de latitudes et de longitudes pour créer la donnée Geography.

Pour cela on va utiliser la méthode STPointFromText. Cette méthode nous permettra de générer une donnée Geography stockée en binaire dans votre colonne de type Geography à partir des latitudes et longitudes.

Définition de la méthode selon la MSDN

STPointFromText ( ‘point_tagged_text’ , SRID )

point_tagged_text : Is the WKT representation of the geography Point instance you wish to return. point_tagged_text is an nvarchar(max) expression

SRID : Is an int expression representing the spatial reference ID (SRID) of the geography Point instance you wish to return.

Point_tagged_text est un NVARCHAR…unWKT representation…WKT pour Well Known Text qui est le format des données spatiales décrit par le Open Geospatial Consortium,  qui définit comment sont écrites et stockées les données spatiales dans les SGBD.
Donc pour utliser la méthode STPointFromText il faut spécifier comme premier argument un objet vecteur géré par SQL Server.
Dans notre cas on utilisera POINT().

Le second argument SRID pour Spatial Reference Identifiers par défaut SQL Server utilise le 4326. C’est un numéro de référence lié au quarillage du globe.

Dans le cas où vous aviez ajouté une nouvelle colonne dans votre table location il vous sufft de faire un UPDATE pour générer vos données géographiques.

  UPDATE dbo.Location
  SET GeoData = geography::STPointFromText('POINT('+CAST(Longitude AS VARCHAR(MAX))+' '+ CAST(Latitude AS VARCHAR(MAX))+')',4326)

NOTE IMPORTANTE :

 Le WKT définit tout d’abord la longitude puis la latitude.
Vous pouvez vérifier en mettant les valeurs max.

  UPDATE dbo.Location
  SET GeoData = geography::STPointFromText('POINT('90 180)',4326)
ERROR --> Latitude values must be between -90 and 90 degrees

Voilà vous possédez désormais des données de type Geography que vous pouvez utiliser dans les Map de SSRS et Report Builder.

Si vous exécutez une requête SQL contenant des données géographiques vous trouverez un nouvel onglet dans lequel vous pouvez voir un rendu sur une carte.

SELECT *
FROM Location

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s