letzte 100 records ausfiltern - die nach bestimmten timestamp kamen

Hallo und guten Abend

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 .gather the latest records with osmconvert - OSM Help ) - 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 (easyclasspage.de )

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- 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:

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
tag_the_world :wink:

Hallo auch!

Mir fÀllt es grad schwer, dein Ansinnen zu verstehen


  1. Was meinst du mit “Records”? Meinst du Nodes, Ways oder Relations?
  2. Was ist, wenn ein Way zu den 100 neuen “Records” gehört, sollen die zugehörigen Nodes auch dann in der Ergebnisdatei sein, wenn sie schon lĂ€nger nicht geĂ€ndert wurden?
  3. Warum grad eine feste Anzahl von “Records”? Warum nicht alles ausgeben, was z.B. im Lauf dieser Woche oder z.B. zwischen 12 und 24 Uhr verĂ€ndert wurde? WĂ€re das eine Alternative?
  4. Was ist dein Ziel? Was hast du mit diesen Daten vor?

Zu osmfilter: nach Objekt-Timestamps lĂ€sst sich damit nicht filtern – glaube ich zumindest.
Du könntest diese FunktionalitĂ€t natĂŒrlich fĂŒr deine Zwecke ergĂ€nzen, es handelt sich ja um freie Software. Ebenso könntest du das sehr flexible Framework Osmium von Jochen Topf dafĂŒr verwenden. Vielleicht klappt es sogar mit dem Programm Osmosis, da bin ich mit jetzt allerdings nicht sicher.

WochenendgrĂŒĂŸe
Markus

hallo Markus - guten Morgen,

Vorweg: Dir einen guten Einstieg ins Wochenende!

vielen Dank fĂŒr deine Antwort. ggf muesste ich oben einfach noch stĂ€rker fokussiert auf die Kernfrage sein: Es gibt sicher mehrere Wege die Fragen zu loesen.

Also bin neu bei opnstreetmap; was mich fasziniert ist die kollaborative Art wie dieses Netz wĂ€chst und zwar allerorten. Ich interessiere ich mich fĂŒr pĂ€d. Initiativen u. Aktionen - v.a. in SĂŒdamerika, Afrika 
 Besonders beeindruckend finde ich zu beoachten was im Verlauf der Zeit passiert. Also Unterschiede pro Zeit zu beoachten - wie man das auch hier besonders gut sehen kann
:;

https://taginfo.openstreetmap.org/tags/amenity=school

Mich interessiert grundsÀtzlich das Wachstum - und eben auch, was zuletzt passiert. ist Bin nicht so sehr an den absoluten Datenmengen interessiert. Die zu extrahieren ist ja auch nicht so schwer. Siehe die jetzt schon lauffÀhigen Abfragen oben.

Jetzt geht es mit um das Herausfiltern spezieller Ergebnisse unter besonderen Randbedinungen: FĂŒr die techn. Umsetzung: Die moeglichen Lösungen die mir noch eingefallen sind:

ich besorge mit mir mit osmconvert u. -filter die Gesamtmenge aller EintrĂ€ge und hab dann eine excel-Tabelle mit - sagen wir 3000 EintrĂ€gen fĂŒr Kolumbien bis ca. 7000 fĂŒr Argentinien. Da sind dann Zeilen mit mehr oder weniger grossen DatensĂ€tzen drinne. In dem Ergebni dasss mit der o.g. Toolchain erreicht wird fehlt z.B. der Timestamp ganz.

**AnsĂ€tze: ** Wenn ich jetzt die Abfragen zu zwei (!!!) Zeitpunkten mache, dann kann ich ĂŒber einen diff der Ergebnissen doch auch die Resultate vergleichen. Das mĂŒsste gehen oder!? Entweder die Differenzen der CSV-formatierten Dateien oder ggf. schon frĂŒher in der Kette. Das ist doch die FRAGE; Und deshalb denke ich dass man ggf mit Timestamps weiterkommt. Deine EinwĂ€nde finde ich plausibel - hier muss ich nochmals nachdenken.

Bei den Resultaten denke ich dass ich insgesamt nodes, ways und relations zusammengenommen haben will. Auf die Zahl 100 bin ich nicht festgelegt. GGF ist es einfach am besten einen oder sagen wir zwei bestimmte Timestamps zu nehmen und dann alle Resultate zu untersuchen. Allerdings ist mir eine Randbediungung wichtig. Ich will fĂŒr diese Abfrage alle Ergebnisse rauswerfen die keine Webseite haben. Das reduziert dann doch erheblich. Die Frage ist - wie kann ich all diese Randbediungungen so in die Toolchain einbauen dass es moeglichst einfach alles wird - und ggf. ich gar nicht so große Datenmengen holen muss. Zwischenbemerkung: kann man dass ggf. auch mit overpass-api machen?

** ZurĂŒck zu osmconvert und -osmfilter: **
Was wĂ€re wenn ich - osmconvert und osmfilter einsetze und dann eben mit der BerĂŒcksichtigung der o.g.Randbediungen: wie könnten ja auch eine Analyse eines Files herstellen und ein Set statistischer Daten herstellen: z.B. auch u.a. folgender Daten:

Aber - und das hab ich durch deine Gedanken erfahren, koennte hier der Einsatz von Timestamps schwierig werden.
GGF koennte ich dann ansetzen wie folgt:

Hmmm - Wie findest du das!?

Oder ich settze so an:

oder so: wie hier erlÀutert http://wiki.openstreetmap.org/wiki/DE:Osmfilter

oder eben so;

wie hier erlÀutert wird: http://wiki.openstreetmap.org/wiki/DE:Osmfilter

Tag-Filter beziehen sich immer nur auf einzelne Tags. Damit lÀsst sich festlegen, welche Tags erhalten bleiben und welche ausgeschlossen werden.
Bestimmte Tags behalten

Und was wĂ€re wenn ich boolsche Algebra arbeiten und dann etwas folgende VerknĂŒpfung baue und dann noch zusĂ€tzlich den Timestamp mit einbaue?!

Ferner koennte ich das vielleicht auch noch angehen mit

a. overpass-Api
b. dem von dir genannten Tool dem Framework Osmium von Jochen Topf

Hmm - ich werde am WE mal einiges ausprobieren u. meld mich wieder hier.

Freu mich sehr wenn dir ggf. noch etwas einfÀllt.

schon mal ein scheones Wochenende!! :slight_smile:
VG TagtheWorld

Das geht alles wunderbar mit Overpass API (momentan nur zurĂŒck bis Juni 2014 bis zum DB rebuild)

Beispiel 1: Schulen in Argentinien am 1.6.2014:


[date:"2014-06-01T00:00:00Z"];area[name="Argentina"][boundary=administrative]->.a;(node(area.a)[amenity=school];way(area.a)[amenity=school];);out center;

Beispiel 2: Änderungen an Schulen in Argentinien seit dem 1.7.2014 (mit BerĂŒcksichtigung gelöschter Objekte)


[adiff:"2014-07-01T00:00:00Z"];area[name="Argentina"][boundary=administrative]->.a;(node(area.a)[amenity=school];way(area.a)[amenity=school];);out center;

Wichtig: Ein Planet enthĂ€lt immer nur den aktuellen Stand der OSM Datenbank. Nochmal zum Mitschreiben: Im Planet sind keine Daten zu frĂŒheren Versionen eines Objekts enthalten, insbesondere auch keine gelöschten Objekte. Das bedeutet, dass man damit keine Vergleichsanalysen zwischen zwei verschiedenen Zeitpunkten fahren kann. Nur bei Objekten mit Version 1 kann man das Erstellungsdatum verwenden, fĂŒr jede nachfolgende Version ist aber nicht mehr ermittelbar, wann das Objekt ursprĂŒnglich erzeugt wurde.Das wĂŒrde nur mit einem Full History Dump funktionieren (DateigrĂ¶ĂŸe >50GB), oder man lĂ€dt sich viele Extrakte von unterschiedlichen Zeitpunkten herunter. Auf keinen Fall funktioniert das nur mit einem Extrakt!

Daher: am besten mit Overpass API probieren und das andere mit osmfilter, osmconvert einfach vergessen. Es funktioniert nicht, da der planet diese Information nicht enthÀlt.

Hallo Couchmapper - guten Tag,

vielen Dank fĂŒr deine rasche Antwort und die tollen Tipps. So funktioniert es bestens. Habe es gleich getestet. Deine ErkĂ€uterungen ĂŒbrigens sind sehr einleuchtend. Wie einfach das mit der Overpass-Api geht ist ĂŒberwĂ€ltigend. Die von mir vergleichsweise sehr sehr kleinen Datenmengen der Abfrage bekommt man mit der gewĂŒnschten PrĂ€zision sehr gut mit overpass-apil.

noch eine letzte VerstÀndnisfrage: :

entsprechend den manuals zu overpass-api kann ich mit union mehrere queries verschachteln:

entsprechend diesem Beispiel - auf der Wikiseite der Overpass-Api: http://wiki.openstreetmap.org/wiki/Overpass_API

Union: Union allows you to group the results of several queries. For example, you can get all nodes that have name Lichtscheid or MĂŒngstener Straße.

hier der Link nochmals http://wiki.openstreetmap.org/wiki/Overpass_API

union

Ergo: mĂŒsste ich nicht dann so um eine entsprechende verschachtelte / verknĂŒpfte Anfrage durchzufĂŒhren - die mit der Absicht nur jene Ergebnisse in die Resultatliste zu bekommen - die eine Webseite beinhalten - dann so ansetzen
:

oder mach ich hier einen Gedankenfehler.

Dir noch ein schoenes Wochenende

VG tagtheworkd

Nein, das ist schon recht nahe dran:


[adiff:"2014-07-01T00:00:00Z"];area[name="Argentina"][boundary=administrative]->.a;(node(area.a)[amenity=school][website];way(area.a)[amenity=school][website];);out center;

2 Änderungen habe ich vorgenommen:
a) statt [website=yes] einfach [website], da beim Tag website in der Regel irgendeine Adresse steht und nicht “yes”
b) auch bei den Nodes habe ich [website] hinzugefĂŒgt

hallo Couchmapper

ganz vielen Dank - Super!!! So geht es.

Overpass-Api ist super. Und dieses Form ist in der OpenStreetMap-Community - die Perle schlechthin. Super community und Austausch.
Hier ist sooo viel Hilfsbereitschaft und unkomplizierte Hilfe. Wenn man die Threads anguckt - sieht man sofort wie toll das ist.

Und nun euch allen noch ein schoenes Wochenende :wink:

vg tagtheworld :wink:

Warum denn diese EinschrÀnkung auf OSM?

Ich finde wir sind eines der besten Software-Foren ĂŒberhaupt, was QualitĂ€t und SeriositĂ€t angeht. Naja - meistens.

Gruss
walter

Mein Leitspruch: “Hier werden Sie geholfen - ob Sie wollen oder nicht” :wink:

hallo Couchmapper hallo Walter, hallo Markus,

@ wambacher: seh das wie du - ein tolles Forum hier. - - wirklich:) Begeisternd, inspierierend und einfach klasse!!

Viele Gruesse noch einen schoenen Wochenanfang u. bis demnÀchst

tag aka martin :slight_smile:

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.

hallo Klaus, - vielen Dank fĂŒr deine Antwort :wink:

neu - ein update: siehe unten!

vorweg: bin an vrschiedenen Techniken interessiert - einfach mal auch aus technischer Sicht.

hab mit Ruby, Python, PHP AnsÀtzen Versuche gemacht,

DarĂŒber hinaus mit dem Overpass-API und natĂŒrlich auch mit osmconvert - siehe unten. Was ich am Ende auch erreichen will, ist ein ein Speichern in MySQL DB oder auch in einer PostgreSQL

An Perl hab ich mich bislang noch nciht so rangetraut. Denk aber dass Dein opaquery.pl echt klasse ist - und sehr leistungsfÀhig. Werde in der kommenen Woche mal ein paar Versuche damit machen.

Denke dass ich opaquery.pl sehr sehr gut dazu einsetzen kann - die Abfragen sehr detailiert zu stellen und auch die Anbidung an die DB gut herstellen zu koennen.-


ich meld mich wieder.

LG matze

**update: **

hallo - habe einige Test gefahren.

das ist echt klasse: http://www.easyclasspage.de/maptools/seite-2.html

man kann sehr sehr viel einstellen

Es kommt in der LeistungsfÀhigkeit sehr sehr den Ideen u. Absichten nahe - mittels einer Toolchain auch die DATEN weiterzuverarbeiten.

  • mysql- oder postgresql
    z.B mit DBI und XML::Twig;

Sehr gut finde ich dass man viel einstellen kann. Timeout u vieles andere mehr.

Eine Frage: Sieht man hier die jeweiligen Timestamps der Bearbitung:

Das ist sehr sehr gut

**
update 2**

die oben erwĂ€hnten Abfragen ergebn ein DATENSET wie hier gezeigt: - Das will ich nun in eine DB ĂŒbergeben


BTW: hier in dem nachfolgenden Link sieht man es etwas besser http://pastebin.com/mq5kAHyy - da ist ein groesserer DATENAUSSCHNITT sichtbar

hier sieht man es etwas besser http://pastebin.com/mq5kAHyy - da ist ein groesserer DATENAUSSCHNITT sichtbar

Das will ich nun in eine DB ĂŒbergeben


update: btw - zur overpass-api ql - vgl. hier http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL

das ist toll dass ich das machen kann