x

Re: letzte 100 records ausfiltern - die nach bestimmten timestamp kamen


Geschrieben von tagtheworld (Gast) am 05. Juli 2014 11:52:37: [flux]

Als Antwort auf: letzte 100 records ausfiltern - die nach bestimmten timestamp kamen geschrieben von tagtheworld (Gast) am 02. Juli 2014 18:34:

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

593 454 - 30 juni
593 319
593 194
592 853
592 443 24 juni

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:

$ osmconvert germany.osm.pbf --out-statistics
timestamp min: 2005-07-05T02:14:17Z
timestamp max: 2011-07-31T19:59:46Z

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

  1. !/bin/bash
  1. update planet file

./osmupdate -v planet.o5m planet_new.o5m

  1. overwrite original file with new version

mv planet_new.o5m planet.o5m

  1. extract out all south-america data

./osmconvert planet.o5m -B=south-america.poly -o=south-america.o5m
mv south-america_new.o5m south-america.o5m

  1. keep the shool data up to date

./osmfilter south-america.o5m --keep="school=*" > latin-america-schools.osm

  1. extract everything with school

./osmfilter latin-america-schools.osm --keep="school" > LatinAmericaSchools.osm

und nun setz ich noch einen drauf:

  1. find all the objects in OSM that have wikipedia links

cat LatinAmericaSchools.osm | grep -e "tag k=\"wikipedia[\:a-z]*" | sed 's/" v="/\t/g' | sed 's/"\"//g' | sed 's/\t\t<tag k="//g' | sed 's/"\/>//g' > wikipediaLinksLatinAmericaSchools.txt

Hmmm - Wie findest du das!?

Oder ich settze so an:

  1. extract everything with school and (!) website

keep Amenity=school & website
osmfilter nodes-in.osm --keep-tags="all school=" & "website" -o=filtered3.osm

Methode: "keep-tags="all .." wirft alles außer "school" weg. Da es "school"

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

osmfilter -v my.osm --keep-node-tags="all amenity=school -o=filtered3.osm

oder eben so;

./osmfilter colombia.osm --keep="amenity=school and webseite=yes" -o=colombia-schools.osm

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

./osmfilter a.o5m --keep-tags="all amenity=restaurant =fast_food" -o=food.osm
./osmfilter a.o5m --keep-tags="all highway= waterway= name=" -o=ways.o5m

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