[OSM-talk-fr] astuce - récupération en nombre par overpass API
Ab_fab
gamma.gts at gmail.com
Dim 4 Déc 13:48:56 UTC 2011
Bonjour,
Un petit retour d'expérience sur un exercice pratique auquel je me suis
livré :
Récupérer les limites des 24 communes de l'agglomération nantaise le plus
_ rapidement,
_ proprement (pas de noeuds ni de limites importées deux fois)
_ et simplement (pas de recours à une base postgis perso par ex.) possible.
Je me suis tourné vers l'Overpass API [1] qui a pour avantage d'être
rapide, à jour et qui ne craint pas les requêtes lourdes.
Il y a un minuteur de sécurité sur les requêtes qui satureraient le
système. Un script qui prend plus de 3 minutes est stoppé.
On peut l'interroger par le biais d'un script, même assez long,ce qui s'est
révélé très pratique.
Le script peut être collé dans une interface sur le web [2] ou bien
enregistré dans un fichier texte (portant l'extension .osm3s) dont le
contenu sera envoyé vers le serveur par une ligne de commande [3]
Pour mon exercice, je me suis orienté sur une recherche des limites en
ciblant la référence insee incluse dans chacune des relations [4], et en
indiquant une bbox pour préciser un peu la zone géographique de la
recherche.
Pour une commune seule (ici Nantes), la requête est comme suit :
<union>
* <query type="relation">
* <bbox-query s="47.0" n="47.5" w="-2.0" e="-1.5"/>
* <has-kv k="ref:INSEE" v="44109"/>
* </query>
* <recurse type="relation-node" into="nodes"/>
* <recurse type="relation-way"/>
* <recurse type="way-node"/>
</union>
<print mode="meta"/>
Il est possible de faire soi-même la longue requête en faisant des copier
coller des lignes marquées d'un * et en y modifiant pour chaque bloc le
code insee. C'est jouable, mais pas vraiment top.
J'ai demandé à Roland Ollbricht (qui développe l'outil) s'il y avait moyen
de faire plus simple. Il m'a proposé de faire un script bash. [N'étant pas
un dieu sous linux, je ne savais pas que l'on pouvait y faire des boucles]
Résultat, le fichier .sh en pièce jointe, où l'on retrouve en bloc tous les
codes INSEE.
Une fois exécuté, il renvoie le fichier insee.osm3s (pièce jointe)
Ne reste plus qu'à faire la requête en [3] et on obtient le fichier .osm
qui s'ouvre nickel dans JOSM
Le fichier .sh est à ajuster pour changer les bbox si l'on s'intéresse à
une autre zone.
On peut aussi changer la formulation de la boucle.
Par exemple, pour un département qui est au complet niveau des limites
administratives on peut faire incrémenter le code insee par pas de 1 du
premier au dernier code commune du département et récupérer les limites
d'un département au grand complet.
Comme je trouve la démarche assez sympathique, je me permets de la partager
ici !
-------------
[1] http://wiki.openstreetmap.org/wiki/Overpass_API
[2] http://www.overpass-api.de/query_form.html
http://overpass.osm.rambler.ru/query_form.html
[3] Pour un script dans le fichier insee.osm3s & une sortie dans le fichier
insee.osm.xml
wget --post-file=insee.osm3s -O insee.osm.xml "
http://overpass-api.de/api/interpreter"
[4] les codes INSEE des 24 communes de Nantes Métropole sont
44009 44018 44020 44024 44026 44047 44074 44035 44101 44120 44198 44094
44109 44114 44143 44150 44172 44166 44171 44194 44162 44190 44204 44215
--
ab_fab <http://wiki.openstreetmap.org/wiki/User:Ab_fab>
"Il n'y a pas de pas perdus"
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.openstreetmap.org/pipermail/talk-fr/attachments/20111204/2b47416b/attachment.htm>
-------------- section suivante --------------
Une pièce jointe autre que texte a été nettoyée...
Nom: get_admin_bnd.sh
Type: application/x-sh
Taille: 612 octets
Desc: non disponible
URL: <http://lists.openstreetmap.org/pipermail/talk-fr/attachments/20111204/2b47416b/attachment.sh>
Plus d'informations sur la liste de diffusion Talk-fr