• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

die letzten 500 records aus osm.pbf - via timestamp ziehen..

sayhello

Geonewbie
Hallo und guten Abend geo-clubber,


ich will eine Abfrage zu einem OSM-file machen mit dem Ziel mit osmfilter die letzten 100 records ausfiltern die nach einem bestimmten Timestamp gemacht wurden.
vorweg: hier hatte ich die Frage mal angesprochen .https://help.openstreetmap.org/questions/34477/gather-the-latest-records-with-osmconvert ) - aber kam leider nicht weiter.

Es geht darum:

a die sagen wir 100 neuesten Records zu einem Gebiet erhalten - mit dem amenity=School - /(erste Randbedinung) und
b mit einem moeglichst vollständigen Datensatz - z.B. mit einer Website. (zweite Randbedingung)

Hab schon einiges kennengelernt: Kann diese Abfrage durchführen ... mit:

- overpass-API, aber das Gebiet ist zu gross und dann passiert folgendes overpass timed out
- das osmconvert-tool (das Manual: m.m.i24.cc/osmconvert.c )
- das osmfilter-tool (das Manual http://m.m.i24.cc/osmfilter.c )
- die opaQuery.pl - ist ein kleines, aber doch recht mächtiges Perl-Programm (http://www.easyclasspage.de/maptools/seite-2.html )

Die Bedingungen die eingehen müssen in die Suche sind wohl so zu formulieren: alles was (newer:'timestamp') - also nur Objekte neuer als Timestamp (Beispiel: '2014-06-01T07:00:00Z'). Will die letzten 100 records z.B. mit dem amenity=School - z.B. von

a. Süd Amerika
b. Afrika
c. dem Planeten - mein Notebook schafft das sicher nicht. DA werde ich dann umsteigen müsssen.

Starten tu ich mit Südamerika:Ensprechend dem Manual http://m.m.i24.cc/osmconvert.c sollte ich ggf. das Timestamp-Kriterium in Betracht ziehen.

"--timestamp=<date_time> add a timestamp to the data\n"
"--timestamp=NOW-<seconds> add a timestamp in seconds before now\n"
"--out-timestamp **output the file\'s timestamp, nothing else\n"**

Randbedingung: Alle Resultate die zwischen zwei Timestamps gemacht wurden u. eine Webseite enthalten.

a. das reduziert die Records auf ein Minimum - ggf. kann ich sogar festlegen,
b. dass ich die letzten 100 records bekomme

Denke dass man mit osmconvert und osmfilter am schnellsten hinkomme:
Code:
    wget http://download.geofabrik.de/south-amer … st.osm.pbf
    ./osmconvert colombia-latest.osm.pbf -o=columbia.o5m
    ./osmfilter columbia.o5m --keep="amenity=school" -o=columbia-schools.o5m
    ./osmconvert columbia-schools.o5m --all-to-nodes -o=columbia-schools_nodes.o5m
    ./osmfilter columbia-schools_nodes.o5m --keep="amenity=school" -o=columbia-schools-results.o5m
    ./osmconvert columbia-schools-results.o5m --csv="@id @lon @lat name addr:street addr:housenumber addr:city website email" --csv-headline -o=columbia-schools-results.csv
Das läuft schon gut - aber nun will ich die Abfrage gemäß der o.g. Randbedinungen a.und b. noch etwas verbessern. Will nur die neuesten Records oder Einträge.

Für einen Tipp bin ich dankbar - vielen Dank schon im Voraus

Viele Grüße
 

toc-rox

Geomaster
Diese overpass-Abfrage gibt dir alle Wege mit dem Tag "amenity = school" die nach dem "2014-05-01" bearbeitet (erfaßt, geändert) wurden:

perl opaQuery.pl "way [amenity=school] (newer:'2014-05-01T13:30:00Z') (50.7, 7.1, 50.8, 7.2); out meta;"

In einem zweiten Schritt müsstest du dann die Reduktion auf die gewünschte Objektanzahl (z.B. die letzten 100) vornehmen. Dies kannst du z.B. mit der Perl-Library "OSM::Tree" recht einfach erreichen.

Gruß Klaus

PS: Um alle Objekte vom Typ "amenity=school" zu erhalten, muß du zusätzlich Nodes und Relationen in die obige Abfrage integrieren.
 
Oben