You are not logged in.
- Topics: Active | Unanswered
Announcement
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***
#1 2015-09-13 21:42:16
- tagtheworld
- Banned

- Registered: 2012-04-25
- Posts: 236
grössere Abfragen an der overpass-api via kommandozeile u. wget
hallo und guten Abend Community,
vorweg: ihr habt mir am Wochenende sehr viel weitergeholfe. Habe diverse Fragen gehabt - bzgl. der Weiterverarbeitung von Abfrageergebnissen.
Dabei habt ihr mir dann gezeigt dass es nicht ratsam ist mit simplexmlelement-xpat auf Ergebnissen zu arbeiten - wenn ich doch am Ende CSV-Daten benoetige.
die untenstehende Abfrage erledigt vieles direkter: Vielen Dank an euch hierfür!!
http://overpass-turbo.eu/s/bqE
[out:csv(::id,::type,"name","website"," contact:email=*")];
area[name="Heidelberg"]->.a;
( node(area.a)[amenity=hospital];
way(area.a)[amenity=hospital];
rel(area.a)[amenity=hospital];);
out;
output:
@id @type name website contact:email=*
145970634 node
303300521 node Thoraxklinik http://www.thoraxklinik-heidelberg.de
678470357 node Kurpfalzkrankenhaus http://www.srh.de/de/kk-heidelberg/index.html
1279003446 node Mercy Hospital for Women www.mercyhealth.com.au
1732872588 node GRN-Klinik Weinheim www.grn.de/klinik-weinheim
2343179537 node Klinik für Allgemeine Innere Medizin und Psychosomatik http://www.klinikum.uni-heidelberg.de/K … 088.0.html
3217716361 node kopfklinik
24595717 way Austin Hospital http://www.austin.org.au/
25208382 way Blutspendezentrale Heidelberg IKTZ
49501406 way Klinik für Kinder- und Jugendpsychiatrie - Tageszentrum für Jugendliche http://www.klinikum.uni-heidelberg.de/T … 360.0.html
90355808 way Kliniken Schmieder Heidelberg http://www.kliniken-schmieder.de
91097339 way Salem http://www.krankenhaus-salem.de
96690377 way Unfallchirurgie - Atos http://www.atos.de/klinik/
99998610 way Warringal Private www.warringalprivate.com.au
140128817 way Institut für Psychosomatische Kooperationsforschung und Familientherapie http://www.klinikum.uni-heidelberg.de/Z … 894.0.html
141216666 way Tropenmedizinische Ambulanz http://www.klinikum.uni-heidelberg.de/S … 489.0.html
und so weiter und so fort
Soweit - so gut!! Ich bin schon mal einen großen Schritt weiter - !!
Nun stehe ich aber vor der Aufgabe grosse Abfragen zu machen. Die würden unmittelbar - führe ich sie direkt auf der http://overpass-Turbo.eu -Seite durch, in einen Timeout führen.
ich sollte andere Verfahren wählen.
a.- entweder den osm-file (entsprechend) von Geofabrik downloaden - und dann auf der Kommandozeile weiterarbeiten.
b. direkt via wget das an die overpass-API richten (an den OSM Overpass API Endpoint)
Dazu gibt es ja dieses Manual: http://overpass-api.de/command_line.html
For short queries, the usage is very simple: Just write the query in the command line:
wget "http://overpass-api.de/api/interpreter?data=node[name=\"Gielgen\"];out;"
Please note that we need to escape the quotation mark ("). Because we have enclosed the URL in quotation marks, we must escape only two more characters: the dollar ($) sign should get (\$) and the backslash (\) should be doubled (\\).
In most cases it would be helpful to store the results with a meaningful filename. Use -O for that purpose:
wget -O target.osm "http://overpass-api.de/api/interpreter?data=node[name=\"Gielgen\"];out;"
For longer queries, it could be helpful to have the query in a separate file. That is also possible:
echo "data=node[name=\"Gielgen\"];out;" >query.osm
wget -O target.osm --post-file=query.osm "http://overpass-api.de/api/interpreter"
habe ja schon einiges mit wget auf der kommandozeile ausgeführt aber kann ich denn auch einen so komplexen Ausdruck wie er hier noetig ist auf der kommandozeile ausführen...?!
wget -O target.osm --post-file=query.osm "http://overpass-api.de/api/interpreter"
verbunden mit:
[out:csv(::id,::type,"name","website"," contact:email=*")];
area[name="Heidelberg"]->.a;
( node(area.a)[amenity=hospital];
way(area.a)[amenity=hospital];
rel(area.a)[amenity=hospital];);
out;
Vielen Dank für Eure Tipps schon - jetzt . ;-)
Last edited by tagtheworld (2015-09-13 21:42:41)
https://wiki.openstreetmap.org/wiki/User:Tagtheworld - interested in all things concerning osm especially those related to the languages Perl, PHP, Python and the databases MySQL and Postgresql.
Offline
#2 2015-09-14 04:57:05
- Swen Wacker
- Member
- From: Lüneburg
- Registered: 2014-07-25
- Posts: 339
Re: grössere Abfragen an der overpass-api via kommandozeile u. wget
Ja. Das steht im letzten Absatz, den Du zitiert hast.
Offline
#3 2015-09-14 07:46:20
- tagtheworld
- Banned

- Registered: 2012-04-25
- Posts: 236
Re: grössere Abfragen an der overpass-api via kommandozeile u. wget
Hallo Swen
Vielen Dank!
https://wiki.openstreetmap.org/wiki/User:Tagtheworld - interested in all things concerning osm especially those related to the languages Perl, PHP, Python and the databases MySQL and Postgresql.
Offline
#4 2015-09-14 08:06:15
- kkulach
- Member

- From: Dortmund
- Registered: 2015-09-02
- Posts: 9
- Website
Re: grössere Abfragen an der overpass-api via kommandozeile u. wget
führe ich sie direkt auf der http://overpass-Turbo.eu -Seite durch, in einen Timeout führen.
Der Timeout bei der Overpass API ist standardmäßig auf 180 Sekunden eingestellt. Wenn du größere Abfragen machen möchtest, musst du ihn u. U. erhöhen :
http://wiki.openstreetmap.org/wiki/Over … QL#timeout
(Nur als Tipp, weil dies noch nicht in deiner Beispiel-Query steht)
Last edited by kkulach (2015-09-14 08:10:11)
Offline
#5 2015-09-14 09:31:08
- tagtheworld
- Banned

- Registered: 2012-04-25
- Posts: 236
Re: grössere Abfragen an der overpass-api via kommandozeile u. wget
Hallo kkulach
vielen Dank! Das ist sehr hillfreich!!
viele Grüße
TagTheworld ![]()
https://wiki.openstreetmap.org/wiki/User:Tagtheworld - interested in all things concerning osm especially those related to the languages Perl, PHP, Python and the databases MySQL and Postgresql.
Offline
#6 2015-09-15 16:05:40
- tagtheworld
- Banned

- Registered: 2012-04-25
- Posts: 236
Re: grössere Abfragen an der overpass-api via kommandozeile u. wget
Hallo u. guten Abend,
das unmittelbare Anhängen des Ausdrucks
[out:csv(::id,::type,"name","website"," contact:email=*")];
area[name="Heidelberg"]->.a;
( node(area.a)[amenity=hospital];
way(area.a)[amenity=hospital];
rel(area.a)[amenity=hospital];);
out;
... schlug leider fehl. Bin grad nicht an dem Rechner - werde euch aber den Fehlercode morgen früh senden.
LG tagtheworld
https://wiki.openstreetmap.org/wiki/User:Tagtheworld - interested in all things concerning osm especially those related to the languages Perl, PHP, Python and the databases MySQL and Postgresql.
Offline
#7 2015-09-15 17:15:45
- Swen Wacker
- Member
- From: Lüneburg
- Registered: 2014-07-25
- Posts: 339
Re: grössere Abfragen an der overpass-api via kommandozeile u. wget
In dem von Dir benutzten Zitat weiter oben stand "For longer queries, it could be helpful to have the query in a separate file".
Du hast eine separate Datei benutzt und nicht etwa den Ausdruck angehängt?
Generell möchte ich Dich mal fragen, warum Du Dich mit so großem Elan in ein für Dich anscheinend sehr neues Metier wagst? Bei vielen Deiner Fragen werde ich das Gefühl nicht los, dass es Dir noch an gewissen Grundlagenkenntnissen im Umgang mit Kommandozeile etc fehlt. Vielleicht wäre es sinnvoll, wenn Du z.B. zunächst einen VHS-Kurs über Grundlagen der Programmierung und Benutzung von Kommandozeile besuchst.
Offline
#8 2015-09-16 13:50:19
- gmbo
- Member

- From: Bochum
- Registered: 2012-02-16
- Posts: 85
- Website
Re: grössere Abfragen an der overpass-api via kommandozeile u. wget
Hallo u. guten Abend,
das unmittelbare Anhängen des Ausdrucks
[out:csv(::id,::type,"name","website"," contact:email=*")];
area[name="Heidelberg"]->.a;
( node(area.a)[amenity=hospital];
way(area.a)[amenity=hospital];
rel(area.a)[amenity=hospital];);
out;... schlug leider fehl. Bin grad nicht an dem Rechner - werde euch aber den Fehlercode morgen früh senden.
LG tagtheworld
Das direkte Anhängen funktioniert nicht so einfach.
Overpass-turbo bietet die Möglichkeit im export Rohdaten direkt von Overpass-Api zu holen. Die zu deinem Beispiel gehörende Linkadresse ließe sich anhängen.
Da wird dann zum Beispiel {{bbox}} in Koordinaten umgewandelt, ebenso werden die Zeichen die in der Shell zu Unsinn führen gequotet.
http://overpass-api.de/api/interpreter?data=%5Bout%3Acsv%28%3A%3Aid%2C%3A%3Atype%2C%22name%22%2C%22website%22%2C%22%20contact%3Aemail%3D*%22%29%5D%3B%0Aarea%5Bname%3D%22Heidelberg%22%5D-%3E.a%3B%0A%28%20node%28area.a%29%5Bamenity%3Dhospital%5D%3B%0A%20%20way%28area.a%29%5Bamenity%3Dhospital%5D%3B%0A%20%20rel%28area.a%29%5Bamenity%3Dhospital%5D%3B%29%3B%0Aout%3BBei längeren Abfragen funktioniert dann wget nicht mehr.
Als alternative benutze ich dann curl
curl http://overpass-api.de/api/interpreter?data=%5Bout%3Acsv%28%3A%3Aid%2C%3A%3Atype%2C%22name%22%2C%22website%22%2C%22%20contact%3Aemail%3D*%22%29%5D%3B%0Aarea%5Bname%3D%22Heidelberg%22%5D-%3E.a%3B%0A%28%20node%28area.a%29%5Bamenity%3Dhospital%5D%3B%0A%20%20way%28area.a%29%5Bamenity%3Dhospital%5D%3B%0A%20%20rel%28area.a%29%5Bamenity%3Dhospital%5D%3B%29%3B%0Aout%3B >Krankenhaus.csvDas ganze läßt dann auch in einem shellscript Variablen zu.
ich habe mal für die
wochenaufgabe Apotheken ein Shellscript geschrieben welches für die einzelnen Bumdesländer eigene Wikitabellen erzeugt.
#/bin/bash
###################################
# Abfrage Wochenaufgabe
# Apotheken
#
###################################
# Zeit in eine Variable damit sie konstand bleibt.
zeit=$(date +%Y-%m-%d_%H-%M)
datum=$(date +%d.%m.%Y)
# für Test ohne Schleife
# i="05"
# Schleife für Regionalcodes
for i in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16
do
echo "Abfrage Bundesland $i gestartet (`date +%d.%m.%Y" "%H:%M`)"
# Tabellenkopf erstellt
case $i in
01) echo "=Tabelle für Schleswig-Holstein ($datum)=" > Liste_"$i".wiki;;
02) echo "=Tabelle für Hamburg ($datum)=" > Liste_"$i".wiki;;
03) echo "=Tabelle für Niedersachsen ($datum)=" > Liste_"$i".wiki;;
04) echo "=Tabelle für Bremen ($datum)=" > Liste_"$i".wiki;;
05) echo "=Tabelle für Nordrhein-Westfalen ($datum)=" > Liste_"$i".wiki;;
06) echo "=Tabelle für Hessen ($datum)=" > Liste_"$i".wiki;;
07) echo "=Tabelle für Rheinland-Pfalz ($datum)=" > Liste_"$i".wiki;;
08) echo "=Tabelle für Baden-Württemberg ($datum)=" > Liste_"$i".wiki;;
09) echo "=Tabelle für Bayern ($datum)=" > Liste_"$i".wiki;;
10) echo "=Tabelle für Saarland ($datum)=" > Liste_"$i".wiki;;
11) echo "=Tabelle für Berlin ($datum)=" > Liste_"$i".wiki;;
12) echo "=Tabelle für Brandenburg ($datum)=" > Liste_"$i".wiki;;
13) echo "=Tabelle für Mecklenburg-Vorpommern ($datum)=" > Liste_"$i".wiki;;
14) echo "=Tabelle für Sachsen ($datum)=" > Liste_"$i".wiki;;
15) echo "=Tabelle für Sachsen-Anhalt ($datum)=" > Liste_"$i".wiki;;
16) echo "=Tabelle für Thüringen ($datum)=" > Liste_"$i".wiki;;
*) echo $1;;
esac
echo "Abgefragt: `date +%d.%m.%Y" "%H:%M`" >> Liste_"$i".wiki
echo "{| class=\"wikitable sortable\"" >> Liste_"$i".wiki
cp Liste_"$i".wiki a_"$i".wiki
# mit curl Overpassabfrage
curl overpass-api.de/api/interpreter?data=%5Bout%3Acsv%28%3A%3Atype%2C%3A%3Aid%2C%3A%3Alat%2C%3A%3Alon%2Cname%2C%22addr%3Astreet%22%2C%22addr%3Ahousenumber%22%2C%22addr%3Apostcode%22%2C%22addr%3Acity%22%2Copening_hours%2Coperator%2Cphone%2C%22contact%3Aphone%22%2Cfax%2C%22contact%3Afax%22%2Cwebsite%2C%22contact%3Awebsite%22%2Cemail%2C%22contact%3Aemail%22%2Cwheelchair%2Cfixme%2Cnote%3Btrue%3B%22~%22%29%5D%3Barea%5B%22de%3Aamtlicher_gemeindeschluessel%22~%22^"$i"%22%5D-%3E.a%3B%0A%28node%28area.a%29%5Bamenity%3Dpharmacy%5D%3B%0Away%28area.a%29%5Bamenity%3Dpharmacy%5D%3B%0Arel%28area.a%29%5Bamenity%3Dpharmacy%5D%29%3B%0Aout%20center%3B > Apotheken_"$i"_"$zeit".csv
# so jetzt sollte die csv Datei mit Zeit im Namen geschrieben sein
sleep 10
# Ab hier kann ich etwas mit der Datei tun
cat Apotheken_"$i"_"$zeit".csv |sed "s/||/\x3cbr \x2f\x3e\d38#124;\d38#124; /g" |sed "s/|/\d38#124;/g" >Apotheken.csv
# Temporäre Datei ohne Pipe-Zeichen erstellt
cat Apotheken.csv |sed '1q' | sed "s/~/ !! /g" |sed "s/^/! /g"|sed "s/@type/Typ/g" |sed "s/@id/ID/g" |sed "s/@lat/Lat/g" |sed "s/@lon/Lon/g" |sed "s/name/Name/g" |sed "s/addr:street/Straße/g" |sed "s/addr:housenumber/Nr./g" |sed "s/addr:postcode/PLZ/g" |sed "s/addr:city/Ort/g" |sed "s/opening_hours/Öffnungszeiten/g" |sed "s/ phone / Telefon /g" |sed "s/contact:phone/Contact:Telefon/g" |sed "s/ fax / Fax /g" |sed "s/contact:fax/contact:fax/g" |sed "s/ website / Webseite /g" |sed "s/contact:website/ Contact:Webseite/g" |sed "s/ email / eMail /g" |sed "s/contact:email/ Contact:eMail/g" |sed "s/ wheelchair / Rollstuhl /g" |sed "s/ fixme / FIXME /g" |sed "s/note/Anmerkungen/g" >> Liste_"$i".wiki
#Kopfzeile erzeugt
echo "! Apotheke                            !! Adresse                           !! Öffnungszeiten           !! Telefon                 !! Fax                         !! Webseite                       !! e-Mail                               !! Rollstuhl !! FIXME !! Anmerkung           !! Lat           !! Lon           !! ID          
" >> a_"$i".wiki
cat Apotheken.csv |sed -n '2,$p' |awk -F~ '{printf ("|-\n|%s<br /><br />Inh. %s||%s %s<br />%s %s||%s||%s<br /><span style=""color:blue;"">%s</span>||%s<br /><span style=""color:blue;"">%s</span>||%s<br /><span style=""color:blue;"">%s</span>||%s<br /><span style=""color:blue;"">%s</span>||%s||%s||%s||%s||%s||%s\n", $5 , $11, $6, $7, $8, $9, $10, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $3, $4, $2 )}' >> a_"$i".wiki
cat Apotheken.csv |sed -n '2,$p' | sed "s/~/ || /g" |sed "s/^node/|- \x0D| align="center" | {{Icon|node}} /g" |sed "s/^way/|- \x0D| align="center" | {{Icon|way}} /g" |sed "s/^relation/|- \x0D| align="center" | {{Icon|relation}} /g" >> Liste_"$i".wiki
# Tabellenspalten fertiggestellt. Jetzt noch das Ende der Tabelle anhängen
echo "|}" >> Liste_"$i".wiki
# Lizenzabschnitt anhängen
echo "=Lizenz=" >> Liste_"$i".wiki
echo "Daten von [https://openstreetmap.org OpenStreetMap]<br>" >> Liste_"$i".wiki
echo "Veröffentlicht unter [http://opendatacommons.org/licenses/odbl/ ODbL]" >> Liste_"$i".wiki
echo "|}" >> a_"$i".wiki
# Lizenzabschnitt anhängen
echo "=Lizenz=" >> a_"$i".wiki
echo "Daten von [https://openstreetmap.org OpenStreetMap]<br>" >> a_"$i".wiki
echo "Veröffentlicht unter [http://opendatacommons.org/licenses/odbl/ ODbL]" >> a_"$i".wiki
echo "Abfrage Regionalschlüsselnummer $i beendet"
# gleich geht es mit dem nächsten Regionalschlüssel weiter.
done
# nach der Zeitausgabe ist endlich Schluß
echo "Abfrage alle Regionalschlüsselnummern beendet (`date +%d.%m.%Y" "%H:%M`)"Auch das ist noch erheblich verbesserungswürdig, aber auch nur von einem Anfänger im Umgang mit Shell und Sed geschrieben.
Es gibt bestimmt viele Wege solche Dinge zu tun, wichtiger ist die Idee dazu.
Viele Grüße
Gisbert
Offline
#9 2015-09-16 20:48:24
- ikonor
- Member
- Registered: 2010-11-08
- Posts: 637
- Website
Re: grössere Abfragen an der overpass-api via kommandozeile u. wget
Sven hat es schon erwähnt: statt die Abrage in der Kommandozeile einzufügen, kann man sie auch in einer Datei speichern (z.B. mit Texteditor) und wget mit "--post-file=" den Dateinamen übergeben.
Hier ein Vorschlag zum Vorgehen:
Ausgangslage: Abfrage in Overpass Turbo: http://overpass-turbo.eu/s/bqE
1. Abfrage in Datei speichern (als query.txt):
in Overpass Turbo im Menü oben: "Export" > "Abfrage" > "Als Text"
2. eine Kommandozeile im Ordner mit der gespeicherten query.txt öffnen
3. wget mit dem Dateinamen aufrufen (speichert Ergebnis in result.osm):
wget -O result.osm --post-file=query.txt "http://overpass-api.de/api/interpreter"Eine Automatisierung der Abfrage für mehrere Regionen wie bei Gisbert kann man sich als nächsten Schritt anschauen, aber ich denke erst sollte das hier mal klappen.
Gruß,
Norbert
Offline