[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ANN] ocaml-osm-route : un ch'tit programme de routage dans des fichiers OSM
|
From |
David MENTRE <dmentre at linux-france dot org> |
|
Subject |
[ANN] ocaml-osm-route : un ch'tit programme de routage dans des fichiers OSM |
|
Date |
Mon, 12 May 2008 22:20:54 +0200 |
Salut,
Pour ceux que ça intéresserait, j'ai fait ce WE un petit programme de
routage à partir des fichier OSM (Open Street Map). Grosso modo, le code
est capable :
- de charger un fichier XML compressé *.osm.bz2 venant d'Open Street
Map ;
- de produire une structure de donnée compacte adaptée au routage ;
- de stocker cette structure dans un fichier de cache pour la recharger
rapidement au prochain lancement sans tout recalculer ;
- de trouver l'index d'un point proche d'un couple (latitude,
longitude) donné ;
- d'appliquer l'algo A*[1] pour aller d'un point à un autre.
Il n'y a aucune interface utilisateur. J'ai fais ça sur le WE pour
bidouiller un peu, ça ne va pas plus loin et je ne retravaillerai
probablement jamais dessus.
Évidemment, c'est du libre sous GNU GPL. Et évidemment, c'est écrit en
OCaml. ;-) Le programme est relativement court :
38 cache.ml
346 compact.ml
52 driver.ml
118 osm.ml
153 route.ml
1201 xmlm.ml
1908 total
Si on ne compte pas xmlm.ml que j'ai récupéré, ça ne fait que 707 lignes
de code, commentaires inclus. OCaml c'est court mais c'est dense ! :-)
Une sortie typique :
«
Looking for lat:48.1221930 lon:-1.6635150...
found=lat:48.1223073 lon:-1.6634277
optimal=lat:48.1223073 lon:-1.6634277
ok
Looking for lat:48.1192000 lon:-1.6673000...
found=lat:48.1192466 lon:-1.6673883
optimal=lat:48.1192466 lon:-1.6673883
ok
lat:48.1192466 lon:-1.6673883 osmid:31930060
lat:48.1223073 lon:-1.6634277 osmid:32450946
distance guehenno -> lanno: 450.236752m
** found a path **
Take - Rue de Fougères (Secondary)
0.0m lat:48.1192466 lon:-1.6673883 osmid:31930060 total:0.0m
76.8m lat:48.1196649 lon:-1.6665670 osmid:30428522 total:76.8m
194.6m lat:48.1203468 lon:-1.6653546 osmid:35506906 total:194.6m
251.5m lat:48.1206998 lon:-1.6648001 osmid:33348210 total:251.5m
Take - Rue François Lanno (Residential)
90.7m lat:48.1212473 lon:-1.6638961 osmid:26819278 total:342.2m
Take - Rue Georges Lechartier (Residential)
55.2m lat:48.1216045 lon:-1.6644105 osmid:32450949 total:397.4m
87.3m lat:48.1218011 lon:-1.6640933 osmid:32450950 total:429.6m
125.8m lat:48.1221037 lon:-1.6638440 osmid:32450951 total:468.0m
164.1m lat:48.1223073 lon:-1.6634277 osmid:32450946 total:506.3m
»
Le programme arrive à lire hexagone.osm.bz2 (la France vue par OSM) et
quelques cartes locales sur Rennes.
J'ai essayé entre d'autres points (place Hoche vers rue François Lanno)
mais l'algorithme ne trouve pas de chemin : je ne sais pas si c'est dû à
un bug dans mon programme ou un problème de connectivité sur la carte
OSM.
Le source est disponible ici :
http://www.linux-france.org/cgi-bin/hgwebdir.cgi/ocaml-osm-route/latest
Vous pouvez retourner à votre fin de WE ensoleillé, ;-)
Amicalement,
d.sign it, code it, publish it, forget it
Footnotes:
[1] http://en.wikipedia.org/wiki/A%2A
--
David Mentré <dmentre at linux-france dot org> -- http://gulliver.eu.org/