Des cartes collaboratives avec Livetitude

Article original publié chez Makina Corpus

Cela fait plusieurs semaines que je voulais présenter ma petite application
de partage de cartes, dont je me sers déjà comme alternative aux marqueurs de Google Maps.

En bref

Livetitude est un outil Web pour créer des cartes de manière collaborative
en temps réel (à la manière d'un pad).

Fonctionnant sur des terminaux mobiles, Livetitude permet également de partager la position des collaborateurs de la carte,
d'exporter les données au format GeoJSON ou de publier la carte sur une page Web.

Sous le capot

J'ai pris du plaisir à hacker cette application, elle tire profit
d'outils très simples mais très efficaces :

  • Leaflet pour afficher les cartes ;
  • Pusher (Websockets) pour la collaboration en temps réel ;
  • CouchDB pour stocker les données ;
  • Flask pour servir les pages ;
  • Heroku pour héberger l'application.

Bien entendu, le code source est libre et disponible sur le GitHub de Makina Corpus.

Utilisation

Une instance est déployée en ligne, dans le cloud d'Heroku,
dont vous pouvez vous servir, pour une utilisation en bon père de famille :)

Les marqueurs peuvent contenir du texte ou de l'HTML, et aucune donnée de localisation des visiteurs n'est stockée.

Comment publier vos données existantes ?

Si vous souhaitez publier et visualiser vos marqueurs sur une carte de Livetitude,
il suffit de poster (POST) les coordonnées de vos points sur l'URL http://server//add.

Par exemple, avec une petite fonction python :

import httplib, urllib

SERVER = "server"  # e.g. vivid-warrior-6693.herokuapp.com

def publish(mapname, coords, data):
    url = "/%s/add" % mapname
    request = {
       'coords': coords,
       'data': data,
       'classid': 5  # (=color)
    }
    params = urllib.urlencode(request)
    headers = {"Content-type": "application/x-www-form-urlencoded",
               "Accept": "text/plain"}
    conn = httplib.HTTPConnection(SERVER)
    conn.request("POST", url, params, headers)
    response = conn.getresponse()
    print response.status, response.reason, response.read()
    conn.close()


publish("PasLoin", "10.1,54.9", "Super resto!")
publish("PasLoin", "19.4,65.1", "Bon mojito")

Les points sont alors visibles en ligne sur http://server/PasLoin ou
disponible en GeoJSON sur http://server/PasLoin/points.

Contribuer

Livetitude est une application très simple, à l'état de preuve de concept. Mais
le code source est très réduit et donc très rapide à prendre en main !

Toutes vos suggestions ou contributions sont les bienvenues !

Votre notation : Aucun Moyenne : 5 (1 vote)