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 )
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
Mir fällt es grad schwer, dein Ansinnen zu verstehen…
Was meinst du mit “Records”? Meinst du Nodes, Ways oder Relations?
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?
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?
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.
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…:;
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:
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!!
VG TagtheWorld
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.
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:
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…:
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
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.
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.
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.-…
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