Géolocalisation avec Node Red
Certain projet peuvent nécessité la mise en œuvre d'une géolocalisation intégrant ou non un capteur GPS. Le but ici est de mettre en place une géolocalisation basée sur l'API de Google à l'aide de Node Red.
API Google Map
Pour commencer, il nous faut obtenir une clé standard pour l'utilisation de l'API Google Map :
Pour utiliser l'API standard, vous devez inclure une clé d'API lors du chargement de l'API.
Avantages de l'utilisation d'une clé d'API :
-
La clé d'API vous permet de surveiller l'utilisation de l'API de votre application dans la Google API Console. Pour plus d'informations, voir l'aide de la Google API Console.
-
Avec une clé, vous avez accès à un généreux quota journalier gratuit et vous avez la possibilité d'augmenter votre quota journalier en activant la facturation à l'utilisation.
-
L'inscription pour obtenir une clé d'API permet à Google de vous contacter à propos de votre application, le cas échéant.
https://developers.google.com/maps/documentation/javascript/get-api-key
- Cliquez sur le bouton Obtenir une clé
- Créer un nouveau projet
- Donnez un nom à votre projet et cliquez sur Next
- Cliquez sur le lien API Console pour activer les API
- Cliquez sur le menu Bibliothèque
- Dans la section Cartes, cliquez sur Tout Afficher
- Activez les API Google Places API Web Service, Google Maps Geocoding API et Google Maps JavaScript API
- Sur la page de l'API Google Maps JavaScript API, cliquez sur le lien Developer documentation
- Cliquez sur le lien Créer une carte avec un marqueur
- Copiez le code d'exemple dans un fichier texte et enregistrer le sous le nom map.html. Ne pas oublier de remplacer YOUR_API_KEY par votre clé.
- Déplacer le fichier map.html dans le dossier racine d'un serveur web, par exemple, dans le dossier /home/node-red-static du serveur node red de la Raspberry. (voir dans l'article Tutoriel Node Red) et accédez à cette page dans un navigateur.
L'analyse du code d'exemple fait apparaitre un objet javascript qui est utilisé pour faire passer les coordonnées GPS du centre de la carte et du marqueur :
var uluru = {lat: -25.363, lng: 131.044};
- Le constructeur d'objet google.maps.Map() permet de construire une nouvelle carte.
- Le constructeur d'objet google.maps.Marker() permet de construire un nouveau marqueur.
Vous pouvez déjà vous amuser à produire des cartes centrées sur le lieu que vous désirez et placer des marqueurs où bon vous semble. Nous allons dans la suite créer une application node red contenant un formulaire de saisie d'adresse d'un lieu et automatiser le processus de géolocalisation.
Google Gécoding API
Pour réaliser notre application, nous aurons besoin de connaitre les coordonnées GPS du lieu à marquer sur la carte. Le plus simple est pourtant de procéder avec une adresse postale. Google fournie une API nommée Geocoding qui de charge de traduire une adresse postale en coordonnées GPS et vice versa et fourni le noeud node red prêt à l'emploi :
Dans le menu de node red, cliquez sur Manage palette, puis recherchez google.
Installez node-red-node-google. Tous les noeuds ne nous serons pas utiles. Vous pouvez désactiver ceux qui ne vous servirons pas si vous ne voulez pas avoir une palette trop chargée.
Le noeud qu'il nous faut est google geocoding. Saisissez le flow suivant :
Le noeud google geocoding est prévu par défaut pour convertir une adresse en coordonnées GPS. Il faut lui fournir en entrée un objet "location" avec un attribut "address" (Voir l'onglet info dans le menu de droite de node red). Il fourni en sortie un objet "location" avec les attributs "lat" et "lon".
On doit donc préparer une adresse sous la forme d'une chaine de caractères comme par exemple : 25 rue de la république, 75000 Paris, France. Préparons un formulaire de saisie :
Configuration du noeud monFormulaire
Le seul champs qui sera exigé est la ville ou le CP. Formatage de la page web dans un Tab nommé "Géolocalisation" et dans un Group nommé "A trouver...".
Il faut maintenant extraire du formulaire la chaine de caractère qui contiendra l'adresse formatée comme attendu par le noeud "Geocode by Address". C'est le rôle de la fonction prepareLocation.
Fonction prepareLocation
A partir de cette information, le noeud "Geocode by Address" fournira en sortie la latitude et la longitude du lieu visé. Préparons la chaine de caractère qui contiendra le code HTML de la page fournie par l'API google map.
Fonction prepareHTML
Il n'y a plus qu'à afficher cette page web dans un template
Configuration du noeud Template
Ici, rien à faire sinon régler les paramètres d'affichage Group, Tab et Size. Certains réglages sont également possibles à partir de l'oglet Dashboard situé à droite de l'écran.
Affichage dans le navigateur
Géolocalisation GPS
L'idée est maintenant de fournir à page de localisation les latitude et longitude issue d'un capteur GPS. J'utilise pour cela un capteur GPS Grove : http://wiki.seeed.cc/Grove-GPS/
Le programme est basé sur l'utilisation de la librairie SoftwareSerial pour lire les données transmises par le GPS. Il est connecté ici sur le port D2 du shield Grove soit, les broches 2 et 3 du connecteur Arduino :
On va ensuite connecter la carte Arduino sur un port USB de la Raspberry Pi et lire les données en provenance du port série, vraisemblablement /dev/ttyACM0
Le programme Arduino fourni les info lat,lon\n toutes les 5 secondes. Faire Ctrl - C pour interrompre.
Nous allons maintenant réaliser le flow node red qui va lire les données issues du port série, les séparer et les transmettre à l'API de google pour afficher une carte centrée sur les coordonnées GPS et y positionner un marqueur.
Configuration du noeud Serial In
Fonction extractLatLon
Fonction prepareHTML
Le facteur de zoom 20 est celui qui me fourni la meilleure vue sur le quartier. A modifier en fonction de la précision souhaité dans la vue.
Configuration du noeud template
Ici, rien à faire sinon régler les paramètres d'affichage Group, Tab et Size. Certains réglages sont également possibles à partir de l'oglet Dashboard situé à droite de l'écran.
Affichage dans le navigateur
La précision n'est pas toujours au rendez-vous, surtout si vous êtes à l'intérieur. J'obtiens tout de même un positionnement précis à une dizaine de mètres environ.
Trackbacks are disabled.