Votre position GPS sur votre blog

Par Maxime, le 8 janvier 2010.

Depuis quelques temps, si vous avez bien observé la barre de droite sur mon blog, j’ai ajouté ma position GPS. Bon vous en conviendrez que c’est pas forcément d’une utilité flagrante, mais c’est toujours plus sympa que de mettre sa Fan Page Facebook.

Impossible à réaliser chez soi ? Que nenni ! Grâce aux dernières technologies Web 2.0, vous allez pouvoir faire vous aussi la même chose !

Maryse, pour cela nous avons besoin des ustensiles suivants :

Screenshot 2010-01-08 10h 58m 00s.png

Je suppose que vous avez fait les prérequis et que vous disposez de toutes les clés API nécessaires. On commence hardcore, avec le script que j’intitulerai gps.php qui va récupérer votre position et l’inscrire dans un fichier quand celle-ci diffère de la précédente.

#!/usr/bin/php
<?php

/* Mettez votre clé API et changez si vous le souhaitez
   le fichier qui contiendra votre dernière position GPS */

$api_key = "";
$api_file = dirname(__FILE__)."/position";

$data = file_get_contents("http://www.instamapper.com/api?action=getPositions&key=".$api_key);
$lines = explode("\n",$data);
$infos = explode(",",$lines[1]);

if (file_exists($api_file)) {

	$data = file_get_contents($api_file);
	$curr_loc = explode("\n",$data);

} else {

	$curr_loc = array(1 => 0);

}

if ($infos[2] > $curr_loc[1]) {

	file_put_contents($api_file,$infos[3].",".$infos[4]."\n".$infos[2]);

}

?>

Rendez ensuite le fichier exécutable :

$ chmod +x gps.php

Maintenant que le script est en place, il faut lui donner une première position en installant le logiciel InstaMapper sur votre téléphone. En fonction du modèle, l’installation varie, donc je ne m’éterniserai pas là-dessus. Toutefois vous devriez avoir un écran de ce type une fois que les données sont envoyées au serveur :

IMG_0405.PNG

Retour au script gps.php. Vérifiez qu’il tourne bien en l’exécutant à la main une fois, puis faites le tourner à intervalle régulier, en crontab par exemple, toutes les heures.

Il suffit à présent d’afficher l’image via une URL Google Maps générée à partir de quelques paramètres. J’ai fait un script pour l’exemple mais ça s’adaptera assez facilement à n’importe quel site :

<?php

/* Mettez votre clé API Google Maps ci-dessous.
   Indiquez le fichier où vous avez mis votre position GPS
   ainsi que la taille de l'image GMaps que vous souhaitez
   obtenir. (LongueurxHauteur) */

$api_key = "";
$api_file = dirname(__FILE__)."/position";
$img_size = "229x170";

$data = file_get_contents($api_file);
$curr_pos = explode("\n",$data);

echo '<img src="http://maps.google.com/staticmap?center='.$curr_pos[0].'&markers='.$curr_pos[0].',smallred&zoom=13&path=rgba:0x0000ff54,weight:5|&size='.$img_size.'&key='.$api_key.'" />';

?>

Si tout se passe bien, vous devriez avoir une image comme celle qui apparaît en permanence à droite de mon blog, avec votre dernière position GPS. Evidemment il ne faut pas oublier de lancer l’application InstaMapper de temps en temps, elle ne tourne pas en tâche de fond (ce qui serait inutile, à moins de voyager très très souvent :-)).

17 commentaires

Matoo

Ouai Google Latitude c’est bien aussi. :)

Maxime

@Matoo : Google Latitude marche pas sur autant de téléphones il me semble, déjà sur mon iPhone il est complètement à côté de la plaque, parfois.

Matoo

Oui tu as raison en effet ! (Même si sur mon iPhone ça marchote pas mal. Le pied étant le Hero qui se mettait à jour tout seul en tâche de fond…)

PhilDub

Bon article, je me demandais quand quelqu’un commencerait à parler de cette petite mais efficace app!
A noter que l’appli sert aussi fabuleusement d’altimètre GPS en montagne, avec ou sans réseau :)

Gonzague

C’est pas mal même si c’est vrai que je trouve google maps très bien (et très précis sur Blackberry et Android) et que du coup Latitude répond bien à ce besoin.

InstaMapper serait assez sympa pour tracker un véhicule autonome en laissant un mobile dedans. Imagine ça combiné au drone Parrot ^_^

Maxime

@Gonzague : C’est faisable, la démo sur le site InstaMapper le montre :)

Gonzague

Maxime : je n’exprimais pas que ça ne le faisait pas hein ;-)

Rémi

Maryse étant en réalité Georges, un serial-killer tuant ses victimes avec des rutabagas, il va pouvoir t’attendre demain matin à 8h devant La Bonbonnière, 15 Rue de l’Arbalète, là où tu achètes ton pain tous les jours, pour te kidnapper et te rutabager sauvagement.

PS: Tu me lègues ton Mac Pro ?

Maxime

@Rémi : Je vais acheter un gilet anti-rutabagage. Je te lègue la moitié au cas où il m’arrive quelque chose, soit 2 écrans et demi.

Rémi

Je vais de ce pas chercher un huissier pour authentifier ce commentaire qui fera office de testament, et je rappelle Georges pour… heuuuu… non rien !

Loris

Super, je pourrai aller te piquer tes 5 écrans pendant que tu es de sortie :p

JuliaChou

Tip top, encore un article qui va me servir ! I <3 your blog, mary me !

Nicolas Kern

Super, merci beaucoup !! Je viens de découvrir ton blog, il est génial, j’aime beaucoup ton parcours !
Je sais pas si je suis le seul, ou si c’est un bug sur le serveur, mais j’ai cette erreur qui m’est renvoyée :
Warning: file_get_contents(http://www.instamapper.com/api?action=getPositions&key=MACLE) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /var/www/gps/gpsbb.php on line 10
Merci ;)

Maxime

@Nicolas : Merci :)

Tu as en fait oublié de remplacer MACLE par ta clé API d’InstaMapper, d’où la bad request.

Nicolas Kern

Euh non non, je l’ai mise, je l’ai juste supprimée de mon post ;)

Maxime

Vérifie que tu as activé l’API dans les paramètres du compte InstaMapper, alors

Nicolas Kern

Oui voilà, je viens juste de voir le problème et j’allais poster me solution ici.
En fait, je n’avais pas activé l’accès aux données par l’API, cela m’a généré une clé, alors qu’avant j’utilisais le device ID…
Merci :P

Laisser un commentaire

Note : Pour qu'un commentaire soit affiché, votre e-mail doit être valide, et votre texte ne doit pas comporter d'insultes. Si vous ne respectez pas ça, n'essayez même pas de commenter.