Jean-Hugues Roy

Expériences | réflexions | scrapbook

Géolocalisation Québec

C’est un secret bien gardé du gouvernement québécois. Le ministère de la Sécurité publique offre depuis 2009 un très utile Service web de géolocalisation, appelé GLO.

Comme il relève de la Sécurité publique, il faut une clé d’accès à usage restreint si on veut s’en servir avec des adresses postales.

Mais, et c’est ici que c’est intéressant pour les journalistes de données, si on s’en sert avec des coordonnées GPS, il est possible de faire des requêtes au GLO avec une clé d’accès publique. Et le GLO nous dit dans quelle municipalité et dans quelle région le point est situé.

Prenons l’exemple d’un lieu situé très précisément à 45.864635 degrés de latitude nord et à 70.857655 degrés de longitude ouest. Il suffit d’entrer ces coordonnées dans une requête formulée comme l’adresse d’un site web. Les coordonnées sont en caractères gras (l’ordre de la longitude ou de la latitude importe peu, mais il faut que les deux soient séparés par une virgule, et on voit que le paramètre cle est fixé à public):

http://pregeoegl.msp.gouv.qc.ca/Services/glo/V5/gloServeurHTTP.php?type=gps&cle=public&texte=GPS%20-70.857655,45.864635&epsg=4326&format=xml

Pour voir ce que ça donne, vous pouvez copier et coller l’URL ci-dessus, ou encore cliquer sur l’hyperlien et vous saurez dans quelle municipalité est situé notre point. Il s’agit, en fait, du lieu exact où a été baptisé le cardinal de Québec, Gérald Cyprien Lacroix (lieu représenté par ce dessin que mon père a fait dans les années 1970… nostalgie!).

Église de Saint-Hilaire-de-Dorset.

Église de Saint-Hilaire-de-Dorset.

Le GLO retourne un fichier XML très simple dans lequel se trouvent, comme promis, les noms de la municipalité et de la région dans lesquelles se trouve notre point. Ça ne fonctionne qu’au Québec, bien que si vous mettez un point ailleurs au Canada, le GLO va vous donner le nom de la localité d’importance la plus proche et la distance à vol d’oiseau.


On peut aussi intégrer le GLO dans une application ou dans un simple script, comme je l’ai fait pour trouver dans quelle municipalité se trouvaient environ 1000 points dont j’avais les coordonnées.

Les points sont tous dans un fichier CSV appelé Puits-2014.csv.

Le script ci-dessous en lit chaque ligne, extrait la longitude et la latitude et les place au bon endroit dans l’URL à envoyer au GLO. Il y fait ensuite près d’un millier de requêtes et, dans chaque réponse obtenue, il extrait du XML les noms de la municipalité (s’il le GLO n’en retourne aucune, c’est que notre point est dans un plan d’eau, en l’occurence le fleuve), de la région et de la localité la plus proche. Enfin, il écrit tous les résultats dans un autre fichier CSV. C’est magique! 🙂

#!/usr/bin/env ruby
# ©2014 Jean-Hugues Roy. GNU GPL v3.

require "nokogiri"
require "open-uri"
require "csv"

sigpeg = CSV.read("Puits-2014.csv", headers:true)

url1 = "http://pregeoegl.msp.gouv.qc.ca/Services/glo/V5/gloServeurHTTP.php?&type=gps&cle=public&texte=GPS%20"
url2 = "&epsg=4326&format=xml"
tout =[]

sigpeg.each do |puits|

   url = url1 + puits[12] + "," + puits[10] + url2
   noPuits = puits[0]
   requete = Nokogiri::XML(open(url))
   geo = {}
 
   municipalite = requete.xpath("//municipalite").text
   localite = requete.xpath("//localite").text.strip

   espace = municipalite.index(" (")
   region = municipalite[espace+2..-2]
   municipalite = municipalite[0..espace].strip

   if municipalite == ""
      municipalite = "Fleuve Saint-Laurent"
   end
 
   geo["Numéro de puits"] = noPuits
   geo["Municipalité"] = municipalite
   geo["Région administrative"] = region
   geo["Localité"] = localite

   puts geo
   tout.push geo

end

puts tout

CSV.open("municipalites.csv", "wb") do |csv|
   csv << tout.first.keys
   tout.each do |hash|
      csv << hash.values
   end
end

Mise-à-jour:

« L’API de Google Maps fait la job, non? » m’a-t-on indiqué par message privé. Oui et non.

Oui:

Non:

  • Parce qu’elle a des limites. Pas plus de 2500 requêtes par jour. Au-delà, il faut payer. Pas très pratique quand on développe et qu’on corrige notre code souvent.
  • Parce qu’elle ne nous donne pas les régions administratives québécoises.
  • Parce que Google est encore au XXe siècle, comme le montre cette requête avec la rue Sherbrooke: la Communauté urbaine de Montréal et la Ville de Lachine existent encore dans ce que Google nous renvoie!

2 commentaires

Commentez
  1. Bonjour ,

    Je suis résidente dans la municipalité de Saint-Elzéar de Bonaventure, en Gaspésie et nous avons un problème de coordonnées GPS depuis un certain temps . Lorsque les gens se servent de leur GPS, les coordonnées GPS sont erronés, il ne donne pas les bonnes indications. Nous avons fait à mainte reprises la demande de modifications des coordonnées GPS avec GOOGLE MAP et avec NAVTEQ de toutes les maisons sur le chemin Principal mais en vain , rien n’a été changé . De plus, nous avons à chaque année un bon nombre de visiteurs venant de partout visiter notre belle attrait touristique qui est notre fameuse Grotte de St-Elzéar , situé dans notre beau village. Ce problème nous cause bien des soucis avec nos visiteurs, car leur GPS leur dit de prendre des chemins inadéquats pour se rendre à notre accueil et ceci ne fait pas une belle image récréo-touristique.
    Pouvez-vous me dire comment fait-on pour corriger se problème ? Quelle est la démarche pour réussir ?

    1. Bonjour Mme Moreau!

      Très bonne question. Je n’ai jamais rencontré de cas comme celui de St-Elzéar.
      Après Google et Navteq, j’essaierais ce site du gouvernement américain (en anglais, par contre): http://www.gps.gov/support/user/mapfix/devices-and-maps/

      Tenez-moi au courant et si ça fonctionne, faites-moi signe à nouveau! 🙂
      Bonne fin d’été et à bientôt!
      JH Roy

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Jean-Hugues Roy [CC] BY-NC-SA, 1988-aujourd'hui Frontier Theme