extraire des points [Résolu]

Bonjour à tous,

question de quelqu’un qui ignore tout de la programmation … c’est pourquoi j’ai estimé ce forum plus adapté que le “-dev” …

J’aimerai obtenir un fichier texte facilement lisible qui contiendra la liste des containers à verre présents dans la base OSM :(sur un secteur géographique réduit évidemment) quelle est la méthode la plus aisée pour le faire ?

1/ j’ai obtenu , dans un fichier .xml, les données “amenity=recycling” et parmi elles je souhaite lister (pour importer ensuite dans libreoffice calc) nom + latitude + longitude des nodes ayant un tag avec recycling_type = container

Comment dois-je m’y prendre ?
(J’ai cru comprendre qu’il me faut créer un fichier .xsl comportant les règles souhaitées … mais c’est ici que je me rapproche dangereusement d’openseamap … et que je me noie :frowning:

Merci pour votre aide .
titivi

ps : sans doute de nombreux scripts font celà très bien … mais je n’ai pas su trouver … quelque chose à ma portée …

Salut,

Tu peux mettre un exemple du format xml que tu as obtenu ?
Si tu as un format du style un amenity=recycling par ligne des fois quelques grep et cut pourraient suffire a extraire les données qui t interessent.
Sinon effectivement tu as les outils dédiés au XML comme le XSLT ou alors tu peux faire un script/programme utilisant un parseur XML dans les langages de script/programmation genre perl, python/C, C++ Java etc
Apres ça dépend aussi de tes connaissances et des moyens que tu veux mettre en oeuvre

Bonjour titivi,

Je n’ai pas eu le temps de regarder dans le détail, mais tu peux regarder Overpass API, qui a été développé pour des consultations rapides de la base (mais attention : en lecture seule uniquement)
Des détails se trouvent ici
http://wiki.openstreetmap.org/wiki/Overpass_API

Pour récupérer la liste des noeuds contenant la clef “recycling_type” ET la valeur “container” en Bretagne, tu peux aller sur cette URL
http://www.overpass-api.de/query_form.html

et indiquer le script

Cela va générer (en quelques secondes) un fichier.
En l’enregistrant avec l’extension .osm Tu pourras l’ouvrir avec JOSM

J’ai compris que tu souhaitais récupérer un fichier csv.
Pour la conversion entre le xml du format .osm et un fichier csv, j’imagine également que c’est possible à faire, mais je n’ai rien à te proposer de concret

Overpass API offre une sortie en résumé des infos : pas de tags, mais juste les id’s des noeuds et leurs coordonnées.
Tu n’auras donc aucune précision sur la description des types de recyclages, mais tu sauras tout de même où ils se trouvent

Bon courage

Bonjour à tous,
Bonjour Quickly et merci pour ta réponse … rapide :wink:

J’ai placé le fichier obtenu ici : http://pastebin.com/HwiG0a0T

Comme je l’ai précisé mes connaissances dans le domaine tendent vers zéro … mais je peux/veux progresser :wink:
XSLT ou grep/cut : je me lancerai dans ce que vous me conseillerez comme le plus simple pour obtenir un fichier texte simple (que je manipulerai ensuite avec, par exemple, libreoffice calc)

En fait je veux extraire les données suivantes :
l’id du node, son nom, latitude+longitude et le “type” (container ou “centre” pour déchèterie)
(ce dernier tag étant ici :
et )

Le fichier de sortie me servira à afficher une carte simple avec la position des points de recyclage (je pense avoir trouvé mon bonheur dans les docs simples pour Openlayers !)

Merci
Titivi

Bonjour et merci ab_fabpour ta réponse détaillée ,

Mes données, je les ai récupérées avec cette commande :
wget http://open.mapquestapi.com/xapi/api/0.6/node[amenity=recycling][bbox=-4.2,47.8,-3.6,48.0]

Ce que tu me proposes est une autre méthode pour obtenir un fichier qui contient les données recherchées ?
Merci pour cette information, les exemples et les liens :slight_smile:

Titivi

Est-ce que tu ne t’intéresses qu’au recyclage du verre ? Dans ce cas, il faudra que tu ajoutes au filtre le tag “recycling:glass=yes”.

J’aimerais comprendre ce que tu veux faire comme traitement entre l’extraction des données OSM et leur affichage. As-tu vraiment besoin de passer par un éditeur genre Calc ? Sais-tu que tu peux afficher directement des fichiers au format XML OSM avec openLayers ? Tu trouveras un exemple ici:
http://wiki.openstreetmap.org/wiki/OpenLayers_osm_file_example

Si tu n’as pas besoin de faire un pré-traitement particulier, la solution proposée par ab_fab est probablement la meilleure car c’est une méthode qui permet d’obtenir des données déjà filtrées (à partir de plusieurs tags comme amenity + container + recycling:glass) au lieu d’avoir tous les “amenity=recycling” que tu obtiens avec open.mapquestapi.com/xapi et qu’il faut ensuite filtrer soi-même.

Salut Titivi,

J ai bricole a l arrache un exemple de programme C++ qui genere un fichier .csv a partir des donnees xml.
Tu peux le trouver ici

Comme je n ai pas pu avoir acces a ton fichier j ai directement utilise le resultat de la commande wget [bbox=-4.2,47.8,-3.6,48.0] que j ai enregistre dans le fichier titivi.xml
J ai aussi pris comme exemple le resultat de la requete donnee par ab_fab, il s agit du fichier interpreter.xml

Le code du programme se trouve dans les fichiers suivants:

  • main.cpp : contient le point de depart du programme

  • my_parser.cpp et my_parser.h : analyseur de fichier XML utilisant la lib expat

  • recycling_element.h et recycling_element.cpp : structure de donnee ou je stocke les infos d un amenity recycling et qui permet de les imprimer

Pour compiler le programme il te faut g++ et la librairie expat.
Les commandes a executer sont celles contenues dans le fichier compil :
g++ -g -Wall -o main.o -c main.cpp
g++ -g -Wall -o recycling_element.o -c recycling_element.cpp
g++ -g -Wall -o my_parser.o -c my_parser.cpp
g++ -o main.exe main.o my_parser.o recycling_element.o -lexpat

il se lance en donnant en premier parametre le fichier d entree et en second parametre le fichier de sortie:
main.exe titivi.xml output_titivi.csv

Et tu obtiens un fichier comme celui la :
id,name,lat,lon,m_type
1383343057,47.9941764,-4.1108474,container
1383343067,47.9972995,-4.1092408,container
1383343088,47.9954329,-4.0957734,container
1383509927,47.9977174,-4.1072486,container
1480133208,47.9056949,-3.9091146,centre

J ai glisse quelques commentaires dans le programme mais j ai fait ca rapidement donc si tu as besoin d infos n hesite pas
La meme chose realisee en python ou perl serait peut etre plus simple et t eviterait d utiliser un compilateur mais je suis plus a l aise en C++

Julien

Et si la requête http est plus pratique, on peut utiliser le serveur Overpass API avec une requête suivant une syntaxe similaire à celle de XAPI
(Pour le fun), j’ai tenté sur une zone “France élargie”, en ajoutant le critère de tri de verre :

http://www.overpass-api.de/api/xapi?node[bbox=6.44,40.98,10.36,51.36][amenity=recycling][recycling_type=container][recycling:glass=yes]
Le serveur envoie son fichier de réponse en moins de 1’30"

Toujours concernant les filtres possibles, le créateur d’Overpass API a promis que l’on pourrait faire des filtres inversés, c’est à dire tous les éléments qui possèdent une clef mais sans telle ou telle valeur
→ par exemple récupérer tous les bâtiments décrits plus précisément que “building=yes”

c est clair que c est bien plus flexible de faire le tri dans la requete directement :slight_smile:

Bonjour Pieren et merci pour ta réponse : un forum réactif et qui accueille les questions “techniques” d’un non-initié … que rêver de mieux ?

Au risque de me répéter, j’ai beaucoup de difficultés à décoder tous ces fichiers :frowning:
Tu veux me faire comprendre que le fichier glissé sur pastebin ( http://pastebin.com/HwiG0a0T ) peut me permettre d’afficher directement les différents points de récolte ?
Ce serait encore plus facile pour moi dans ce cas (je vais , ce soir, tenter d’afficher la carte de l’exemple dont tu m’as transmis le lien)
Il me faudrait dans ce cas un espace pour stocker le fichier.osm (initialement j’envisageai de me contenter d’un blog “dotclear” dont je dispose gracieusement.)

Pour que mon projet soit plus clair je suis parti avec l’idée d’afficher les points de récolte (déchèteries + containers) sur une carte “Chimère” (un exemple d’utilisation de ce mashup ici http://leda.proxience.com/chimere-brest/plouarzel ) … pour m’apercevoir que cela n’a pas grand sens.
En effet cela m’oblige d’une part à placer manuellement chaque container et d’autre part les mises à jour seront impossibles (pas d’import prévu semble-t-il)

ok … je commence à saisir :slight_smile:
… et finalement , tu as raison je n’ai rien à ajouter : si je dois modifier et/ou compléter certaines données (horaires de la déchèterie par exemple) … autant que je le fasse dans la base osm !

merci
Titivi

Rebonjour Quickly,

ah ? même pour une telle manip je foire :frowning:
Je ne comprends pas : ici je l’affiche …

Merci beaucoup :slight_smile:
Même si les autres contributions du fil m’envoient vers une autre procédure, ton bout de code me sera utile pour afficher et conserver un listing .

en plus avec une doc !
Je m’initie à tout ça ce soir .

@+
Titivi

Non tu n y es pour rien. C est le proxy du boulot qui bloque tous les sites comme pastebin :wink:

De rien c est toujours marrant a bricoler

Hum doc c est un bien grand mot :roll_eyes: bon courage

En cherchant un peu, on peut trouver des tuto pour afficher simplement des tuiles et des données OSM avec openLayers. Par exemple, celui-ci : http://www.geotribu.net/node/363

Ca peut être très simple si on veut juste afficher un petit rond dans une couleur un peu moche mais on peut avoir mieux en ajoutant un peu de javascript. On peut même ajouter une couche “images aériennes” mais là, il faut étudier les conditions d’utilisation.

Bonjour Pieren,
Bonjour à tous,

Merci pour ce lien : c’est tout à fait ce qu’il me faut /faudra /faudrait :slight_smile:

Mais il va avant tout me falloir travailler et ne pas brûler les étapes (j’en suis pour l’instant à tenter de comprendre pourquoi mon fichier texte reste incorrect !
http://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example )

ou/et alors (et parce que le temps passe finalement très vite) savoir m’entourer de programmeurs :wink:

@+

Titivi

Bonjour Titivi,

T’es-tu assuré que ton fichier texte est bien encodé en UTF-8, en particulier si tu utilises Windows ?
J’ai fait des essais il y a quelques mois (*) (sur la base d’une production N. Dumoulin) et je pense avoir un peu tatonné à cause de ce genre de détails.

(*) http://abfabe.free.fr/osm/nounou2/?zoom=14&lat=48.9001&lon=2.25627&layers=00B0FT
Fichier des POI ici : http://abfabe.free.fr/osm/nounou2/poi.txt

Bonjour ab_fab, bonjour à tous,

Je n’en sais -plus- rien !
Suite à ta remarque j’ai à nouveau vérifié :
$ file -i textfile.txt\
textfile.txt : text/plain; charset=us-ascii

donc cela me semble bien … car je lis dans wikipedia (UTF-8 — Wikipédia ) : […] Compatibilité avec US-ASCII
Un texte en US-ASCII est codé identiquement en UTF-8. […]
Je pense donc que tout est correct (textfile.txt enregistré avec “mousepad, éditeur pour xfce” ) puisque je l’ai bien enregistré avec mousepad en “UTF-8” (et option LF ; mais j’ai aussi tenté CR ou encore CR + LF ).

Cependant, rien qu’une carte, avec mes exemples comme avec les tiens si je reprends tes fichiers (juste modifié la position ; désolé ! il me faut de l’eau salée :wink: http://stratocumulus.free.fr/osmtest/test.htm (et http://stratocumulus.free.fr/osmtest )
pas de markers :frowning:

C’est quand même pénible de ne rien comprendre :wink:

titivi

ps : je réédite mon message pour le corriger … et j’ai grand honte !!!

textfile + un espace.txt ce n’est pas la même chose que textfile.txt … et je n’oserai pas vous dire le temps qu’il m’a fallu pour trouver cette imbécilité :wink:

merci ab_fab, merci à vous tous pour cet échange :slight_smile:

Bonjour ab_fab, bonjour à tous,

Je viens de tenter ta procédure :

Le fichier n’est pas accepté par JOSM ( version 3592) :

"Impossible de lire le fichier containers.osm. Erreur ligne 6 colonne 58 Attribut “version” manquant pour la primitive osm avec l’identifiant 318511005

le début de ce même fichier étant :

<?xml version="1.0" encoding="UTF-8"?> The data included in this document is from [www.openstreetmap.org](http://www.openstreetmap.org). It has there been collected by a large group of contributors. For individual attribution of each item please refer to [http://www.openstreetmap.org/api/0.6/](http://www.openstreetmap.org/api/0.6/)[node|way|relation]/#id/history . . .

Finalement, merci : c’est vrai qu’il en faut un petit peu :wink:

@+
Titivi

Bonjour,

Après relecture de la documentation Overpass API, il manque quelques données pour JOSM avec la première requête que je t’ai donnée
Toutefois, si tu la reformules en remplaçant par ça doit marcher

idem, avec la requête http suivante sur la Bretagne
www.overpass-api.de/api/xapi?node[bbox=-5.5,46.5,-1.4,49.5][amenity=recycling][recycling_type=container][recycling:glass=yes][@meta]
on peut enregistrer un fichier .osm qui ne posera pas de souci pour l’ouverture dans JOSM.
Je cite le wiki : "You can add the directive [@meta] to any query to obtain also meta data in the results. This takes longer, but will allow you to open the results in JOSM. "

@+

Bonjour ab_fab, bonjour à tous,

ça fonctionne parfaitement en effet :slight_smile:

Merci bien pour ce complément d’infos sur ces 2 méthodes.

@+
Titivi

Bonjour Julien, bonjour à tous,

Je reviens, pour une petite question, sur ton travail,

Sans compétences dans le domaine mais adepte, globalement, du libre, que faut-il faire/modifier pour pouvoir utiliser ton outil sous Linux ?
(car j’ai bien créé main.exe … dont je ne peux rien faire ici ! )

Merci
@+

Titivi