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-11-17 10:06:22
- Nico@geoloop
- Member
- Registered: 2015-11-17
- Posts: 35
Statistiken der OSM Datenbank
Hallo,
für ein eigenes Projekt möchte ich gerne Statistiken auf Grundlage der OSM DB erzeugen. Was mich interessiert ist z.B. Wieviele Einträge vom Type "highway_type=residential" gibt es in einem bestimmten Gebiet. Gibt es einen Weg, das aus der Datenbank auszulesen, ohne die DB lokal speichern zu müssen (vielleicht eine API Abfrage)? Falls ja, wie muss ich das anstellen, bzw. gibt es eine Dokumentation?
Auf der folgenden Seite habe ich eine solche Statistik gefunden (siehe: ORS highway Type stats): http://wiki.openstreetmap.org/wiki/DE:OpenRouteService
Mit besten Grüßen
Nico
Offline
#2 2015-11-17 14:18:56
- TEL0000
- Moderator
- From: Berlin
- Registered: 2008-06-11
- Posts: 968
Re: Statistiken der OSM Datenbank
Die Overpass-API dürfte dir weiterhelfen.
Mit diesem Aufruf könntest du z.B. highway=residential in einem bestimmten Gebiet zählen:
http://overpass-turbo.eu/s/cMJ
Offline
#3 2015-11-17 14:31:11
- Nakaner
- Moderator

- From: Karlsruhe
- Registered: 2011-09-03
- Posts: 3,046
- Website
Re: Statistiken der OSM Datenbank
Wenn du die Overpass-API nicht quälen willst, kannst du dir auch auf Basis von libosium ein kleines C++-Programm schreiben, das einen PBF-Extrakt (http://download.geofabrik.de) einliest und für dich zählt. https://github.com/osmcode/osmium-contr … oad_length
Werdet Mitglied in der OSM Foundation und bestimmt über die Zukunft der Foundation und des Projekts mit. Ab 42 Mappingtagen in den letzten 365 Tagen ist es kostenlos. Jetzt beitreten ("Active Contributor Membership")!
Moderator im Bereich users: Austria
Offline
#4 2015-11-17 15:43:03
- SammysHP
- Member

- From: Celle, Germany
- Registered: 2012-02-27
- Posts: 1,707
- Website
Re: Statistiken der OSM Datenbank
Möglicherweise möchtest du auch gar nicht die Anzahl der Ways, sondern die Länge haben.
Offline
#5 2015-11-21 16:29:59
- Nico@geoloop
- Member
- Registered: 2015-11-17
- Posts: 35
Re: Statistiken der OSM Datenbank
Hallo,
vielen dank für den Hinweis. Das funktioniert soweit gut. Gibt es eine Seite, wo solche statistischen Befehle an die Overpass-API dokumentiert sind?
Die Overpass-API dürfte dir weiterhelfen.
Mit diesem Aufruf könntest du z.B. highway=residential in einem bestimmten Gebiet zählen:
http://overpass-turbo.eu/s/cMJ
Offline
#6 2015-11-21 16:35:01
- Nico@geoloop
- Member
- Registered: 2015-11-17
- Posts: 35
Re: Statistiken der OSM Datenbank
Danke für den Hinweis auf libosium. Ich schaue mir das Tool bei Gelegenheit mal an. Leider sind meine C++ Kenntnisse beschränkt.
Was meinst Du mit Overpass-API "quälen"? Gibt es ein Problem (eventuell unerwünscht), wenn ich die API dafür nutze? Sprich, wozu ist die Overpass-API gedacht?
Wenn du die Overpass-API nicht quälen willst, kannst du dir auch auf Basis von libosium ein kleines C++-Programm schreiben, das einen PBF-Extrakt (http://download.geofabrik.de) einliest und für dich zählt. https://github.com/osmcode/osmium-contr … oad_length
Offline
#7 2015-11-21 16:45:13
- Nico@geoloop
- Member
- Registered: 2015-11-17
- Posts: 35
Re: Statistiken der OSM Datenbank
Ja gerne, wie mache ich das? einfach statt "count" "lenght" benutzen geht leider nicht.
way["highway"="residential"]({{bbox}});
out length;
Möglicherweise möchtest du auch gar nicht die Anzahl der Ways, sondern die Länge haben.
Offline
#8 2015-11-21 17:34:03
- chris66
- Member

- From: Germany
- Registered: 2009-05-24
- Posts: 10,130
Re: Statistiken der OSM Datenbank
Was meinst Du mit Overpass-API "quälen"? Gibt es ein Problem (eventuell unerwünscht), wenn ich die API dafür nutze? Sprich, wozu ist die Overpass-API gedacht?
http://wiki.openstreetmap.org/wiki/Overpass_API
Also, im Prinzip ist sie für solche Zwecke gedacht, wenn man es nicht übertreibt. ![]()
Mapper aus dem Münsterland.
Offline
#9 2015-11-22 09:41:35
- Joachim Moskalewski
- Member
- From: Sindelfingen
- Registered: 2012-11-23
- Posts: 346
- Website
Re: Statistiken der OSM Datenbank
Bitte bedenke, dass die Anzahl von Wegen in der OSM-Datenbank rein gar nix mit der Anzahl der realen, erfassten Wege zu tun hat; Da ist auch nix gebietsweise innerhalb von OSM selbst vergleichbar - der eine Mapper trennt Wege an jeder nur möglichen Stelle in separate, kurze Wegstücke auf, und ein anderer verbindet sie möglichst so wie die Realität für ihn korrekt aussieht, und oftmals trifft man in der Datenbank Wege auch so zusammengefasst an, wie sie jemand eben draußen erfasst hat (also auch ein Abbiegen ist dann noch immer der gleiche Weg).
Offline
#10 2015-11-22 10:05:03
- mmd
- Member
- Registered: 2010-11-06
- Posts: 2,150
Re: Statistiken der OSM Datenbank
Ja gerne, wie mache ich das? einfach statt "count" "lenght" benutzen geht leider nicht.
way["highway"="residential"]({{bbox}});
out length;
Hallo,
Overpass Api unterstützt aktuell keine Längenermittlung. Es gibt da zwar ein GitHub-Ticket, aber ich rechne nicht damit, dass das so schnell kommt.
https://github.com/drolbr/Overpass-API/issues/237
Gruß,
mmd
Offline
#11 2015-11-22 11:47:44
- Nico@geoloop
- Member
- Registered: 2015-11-17
- Posts: 35
Re: Statistiken der OSM Datenbank
OK, dass ist ein Problem, was ich noch nicht auf dem Schirm hatte. Danke für den Hinweis! Dann versuche ich mal zu erklären, worum es eigentlich geht. Ich möchte für ein Uniprojekt die Veränderungen im Bereich Fußwege (z.B. highway = sidewalk, footway, usw.) dokumentieren. Im Prinzip soll es eine statistische Abbildung (Säulendiagramm) werden. Auf der X-Achse die KW und auf der Y-Achse die Anzahl (oder Längen) der für Fußgänger benutzbaren Wege.
Bitte bedenke, dass die Anzahl von Wegen in der OSM-Datenbank rein gar nix mit der Anzahl der realen, erfassten Wege zu tun hat; Da ist auch nix gebietsweise innerhalb von OSM selbst vergleichbar - der eine Mapper trennt Wege an jeder nur möglichen Stelle in separate, kurze Wegstücke auf, und ein anderer verbindet sie möglichst so wie die Realität für ihn korrekt aussieht, und oftmals trifft man in der Datenbank Wege auch so zusammengefasst an, wie sie jemand eben draußen erfasst hat (also auch ein Abbiegen ist dann noch immer der gleiche Weg).
Offline
#12 2015-11-22 11:49:50
- Nico@geoloop
- Member
- Registered: 2015-11-17
- Posts: 35
Re: Statistiken der OSM Datenbank
Ok, danke für den Hinweis. Dann ist die Idee (im Moment) eine Sackgasse.
Nico@geoloop wrote:Ja gerne, wie mache ich das? einfach statt "count" "lenght" benutzen geht leider nicht.
way["highway"="residential"]({{bbox}});
out length;Hallo,
Overpass Api unterstützt aktuell keine Längenermittlung. Es gibt da zwar ein GitHub-Ticket, aber ich rechne nicht damit, dass das so schnell kommt.
https://github.com/drolbr/Overpass-API/issues/237
Gruß,
mmd
Offline
#13 2015-11-22 19:16:04
- SammysHP
- Member

- From: Celle, Germany
- Registered: 2012-02-27
- Posts: 1,707
- Website
Re: Statistiken der OSM Datenbank
Ich möchte für ein Uniprojekt die Veränderungen im Bereich Fußwege (z.B. highway = sidewalk, footway, usw.) dokumentieren.
Die Veränderungen in OSM oder in der Realität? Letzteres wird mit OSM nicht möglich sein, da es weder eine hundertprozentige Abdeckung, noch eine zeitnahe Datenerfassung gibt. Was bedeutet zudem "Fußweg" bei dir? Ein eigenständiger Weg? Parallel zu einer anderen Straße? Nur Bordstein oder eine andere Abtrennung? Radfahren erlaubt? Fußgängerzonen? Waldwege? Trampelpfade?
Offline
#14 2015-11-22 21:15:32
- Nico@geoloop
- Member
- Registered: 2015-11-17
- Posts: 35
Re: Statistiken der OSM Datenbank
Es geht um die Veränderungen in der OSM DB. Fußwege sind für mich alles weg, die ein Fußgänger in der Regel benutzt. Also Bürgersteige (egal in welcher Weise gemappt), verkehrsberuhigte Straßen, Pfade die zum gehen geeignet sind, usw.. Das Untersuchungsgebiet ist das Stadtgebiet von Potsdam.
Nico@geoloop wrote:Ich möchte für ein Uniprojekt die Veränderungen im Bereich Fußwege (z.B. highway = sidewalk, footway, usw.) dokumentieren.
Die Veränderungen in OSM oder in der Realität? Letzteres wird mit OSM nicht möglich sein, da es weder eine hundertprozentige Abdeckung, noch eine zeitnahe Datenerfassung gibt. Was bedeutet zudem "Fußweg" bei dir? Ein eigenständiger Weg? Parallel zu einer anderen Straße? Nur Bordstein oder eine andere Abtrennung? Radfahren erlaubt? Fußgängerzonen? Waldwege? Trampelpfade?
Offline
#15 2015-11-22 23:57:52
- TEL0000
- Moderator
- From: Berlin
- Registered: 2008-06-11
- Posts: 968
Re: Statistiken der OSM Datenbank
Mit way["highway"="residential"]({{bbox}}); out skel geom; bekommst du alle Residentials mit den Koordinaten der Knoten.
Mit den Informationen könntest du ein Skript schreiben, das die Längen berechnet. Dafür müsstest du im Prinzip nur den Abstand der Knoten berechnen, und dann alle Abstände addieren.
Frag mich aber nicht, wie man den Abstand zwischen zwei Koordinaten berechnet. Das weiß ich jetzt so aus dem Kopf auch nicht.
Offline
#16 2015-11-23 12:11:12
- gormo
- Member
- Registered: 2013-08-01
- Posts: 2,119
- Website
Re: Statistiken der OSM Datenbank
Wie fit bist du denn in GIS?
Mit dem QuickOSM-Plugin für QGis könntest du dir für einen definierten Ausschnitt eine bestimmte Overpass-API-Abfrage ausführen, dann mit ein bisschen Prozessierung (manuell oder python) die Weglänge (sogar pro Wegeklasse) berechnen lassen.
OSM hat nicht das Ziel bis Ende des Monats einen vollständigen Datensatz der Welt zu enthalten.
(nach S.W.) - Aber weil die Welt vielfältig ist, weil sie auch im Detail interessant ist, mag ich genaue Karten (nach C.)
Offline
#17 2015-11-23 21:18:08
- Nico@geoloop
- Member
- Registered: 2015-11-17
- Posts: 35
Re: Statistiken der OSM Datenbank
Danke, funktioniert gut. Was für eine Sprache nutzt die Overpass API eigentlich? Ist das SQL?
Mit way["highway"="residential"]({{bbox}}); out skel geom; bekommst du alle Residentials mit den Koordinaten der Knoten.
Mit den Informationen könntest du ein Skript schreiben, das die Längen berechnet. Dafür müsstest du im Prinzip nur den Abstand der Knoten berechnen, und dann alle Abstände addieren.
Frag mich aber nicht, wie man den Abstand zwischen zwei Koordinaten berechnet. Das weiß ich jetzt so aus dem Kopf auch nicht.
Offline
#18 2015-11-23 21:20:11
- Nico@geoloop
- Member
- Registered: 2015-11-17
- Posts: 35
Re: Statistiken der OSM Datenbank
OK, das ist eine gute Idee. Mal sehen, ob ich das hinbekomme.
Wie fit bist du denn in GIS?
Mit dem QuickOSM-Plugin für QGis könntest du dir für einen definierten Ausschnitt eine bestimmte Overpass-API-Abfrage ausführen, dann mit ein bisschen Prozessierung (manuell oder python) die Weglänge (sogar pro Wegeklasse) berechnen lassen.
Offline
#19 2015-11-23 22:29:40
- gormo
- Member
- Registered: 2013-08-01
- Posts: 2,119
- Website
Re: Statistiken der OSM Datenbank
Danke, funktioniert gut. Was für eine Sprache nutzt die Overpass API eigentlich? Ist das SQL?
Das ist OverpassQL: http://wiki.openstreetmap.org/wiki/Over … verpass_QL .
Es gibt aber auch einen XML-Dialekt für die Abfrage. Geht beides.
SQL ist (ganz) anders.
Außerdem ist es in Foren üblich, deinen Text unter den zu schreiben, den du zitierst. Die normale Leserichtung ist von oben nach unten.
*/dozier*
Last edited by gormo (2015-11-23 22:30:57)
OSM hat nicht das Ziel bis Ende des Monats einen vollständigen Datensatz der Welt zu enthalten.
(nach S.W.) - Aber weil die Welt vielfältig ist, weil sie auch im Detail interessant ist, mag ich genaue Karten (nach C.)
Offline
#20 2015-11-23 23:39:23
- reneman
- Member

- From: Mainz
- Registered: 2012-10-13
- Posts: 1,106
- Website
Re: Statistiken der OSM Datenbank
» Check the Monuments! «
Viele der als historic=monument erfassten Objekte sind in Wirklichkeit kein Monument. Sie wurden mangels passender Tags oder aus Unkenntnis als Monument erfaßt. Diese Karte CheckTheMonuments will bei der Korrektur unterstützen.
Offline
#21 2015-11-24 01:27:38
- slhh
- Member
- Registered: 2012-09-02
- Posts: 358
Re: Statistiken der OSM Datenbank
Hier ist ein Beispiel, wie man die Länge der highway=residential in Potsdam bestimmen kann:
JOSM:
- starten
- Fernsteuerung aktivieren
- Bearbeiten->Einstellungen wählen, Expertenmodus an, dann unten erweiterte Einstellungen (Papier mit Schraubenschlüssel) wählen und dort selection.max-ways-for-statusline kräftig erhöhen (mit 2500 funktioniert dieses Beispiel)
- JOSM nicht schließen
Overpass-Turbo:
-Wizard: highway=residential in Potsdam
- Export -> JOSM
- Abfrage automatisch reparieren lassen -> Daten werden in JOSM geladen
wieder in JOSM:
-Alles selektieren
-Länge in Statuszeile ablesen (352,2km)
Offline
#22 2015-11-24 10:57:44
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Statistiken der OSM Datenbank
Ich möchte für ein Uniprojekt die Veränderungen im Bereich Fußwege (z.B. highway = sidewalk, footway, usw.) dokumentieren. Im Prinzip soll es eine statistische Abbildung (Säulendiagramm) werden. Auf der X-Achse die KW und auf der Y-Achse die Anzahl (oder Längen) der für Fußgänger benutzbaren Wege.
Dafür würde ich nicht auf die API zurückgreifen um dort gefilterte Wege auszulesen, sondern wöchentlich sämtliche OSM-Daten für das ganze Gebiet holen, archivieren und dann erst filtern und auswerten. Bei dem Gebiet einer Stadt sollte das noch gut gehen. Ich würde dafür eine Datenbank basteln, aber sicher gibt es auch andere Wege.
Du wirst nämlich in einem halben Jahr feststellen, dass Du etwas wichtiges vergessen hast (*) und hast dann keine Möglichkeit mehr, das rückblickend zu korrigieren, wenn du nur vorgefilterte historischen Daten hast.
Grüße, Max
(*) Nur mal so als Beispiel: Du wirst du feststellen, dass sich die Länge der Fusswege plötzlich verdoppelt, wenn jemand (highway=*, sidewalk=both) zu getrennt gemappten Bürgersteigen ändert. Oder du hast schlicht highway=steps vergessen oder eine ungewöhnliche Kombination aus highway=* und foot=*
Offline
#23 2015-11-24 11:14:22
- mmd
- Member
- Registered: 2010-11-06
- Posts: 2,150
Re: Statistiken der OSM Datenbank
Dafür würde ich nicht auf die API zurückgreifen um dort gefilterte Wege auszulesen
Wenn das Gebiet nicht allzu groß ist, lassen sich auch "historische" Daten (im Sinne von: wie sah die Datenbank am Tag x aus?) abfragen: (link).
Offline
#24 2015-11-24 13:39:53
- gormo
- Member
- Registered: 2013-08-01
- Posts: 2,119
- Website
Re: Statistiken der OSM Datenbank
maxbe wrote:Dafür würde ich nicht auf die API zurückgreifen um dort gefilterte Wege auszulesen
Wenn das Gebiet nicht allzu groß ist, lassen sich auch "historische" Daten (im Sinne von: wie sah die Datenbank am Tag x aus?) abfragen: (link).
Das habe ich auch schon gemacht (mit Python und overpy), es geht auch gut.
import overpy
api = overpy.Overpass()
DEBUG = False
def debug(str):
if DEBUG:
print(str)
def objects_in_time_and_space(relationid,y,m,d, kv={'key':'natural','value':'tree'}):
"""Liefert ein tupel mit (anzahl_nodes, anzahl_ways) zurück.
Der dict kv gibt an, nach welchem Key und welchem Value gesucht wird. Default natural=tree
"""
areaid = relationid + 3600000000
result = api.query("""
[timeout:250]
[date:"%d-%02d-%02dT00:00:00"]
;
area(%d)->.searchArea;
(
node
["%s"="%s"]
(area.searchArea);
way
["%s"="%s"]
(area.searchArea);
);
out %s;
""" % (y,m,d,areaid,kv['key'],kv['value'],kv['key'],kv['value'],'body' if DEBUG else 'skel'))
debug("*** nodes (%d) ***" % len(result.nodes))
for node in result.nodes:
debug("%s (%d)" % (node.tags.get("name", "(unbenannt)"), node.id ))
debug(" natural: %s" % node.tags.get("natural", "n/a"))
debug(" Lat: %f, Lon: %f" % (node.lat, node.lon))
debug("*** Ways (%d) ***" % len(result.ways))
for way in result.ways:
debug("Name: %s" % way.tags.get("name", ""))
for node in way.nodes:
debug(" Lat: %f, Lon: %f" % (node.lat, node.lon))
return (len(result.nodes), len(result.ways))
if __name__ == "__main__":
#relid = 62677 #LK Osterode
#relid = 51477 #BRD
relid = 1421436 #AL8 Clausthal-Zellerfeld
demo = 2
if demo == 1:
print(" Berggipfel (natural=peak) jeweils am Monatsersten 2014-2015")
print("time;nodes;ways")
for year in range(2014,2016,1):
for month in range(1,13):
n = objects_in_time_and_space(relid,year,month,1,{'key':'natural','value':'peak'})
print("%d-%02d-%02d;%d;%d" % (year,month,1,n[0],n[1]))
elif demo == 2:
print(" Default (natural=tree) am 1.3.2015")
y = 2015
m = 03
n= objects_in_time_and_space(relid,y,m,1)
print("time;nodes;ways")
print("%d-%02d-%02d;%d;%d" % (y,m,1,n[0],n[1]))
elif demo == 3:
print(" Gipfel (natural=peak) am 23.3.2015 mit DEBUG")
DEBUG = True
y = 2015
m = 03
d = 23
n= objects_in_time_and_space(relid,y,m,d,{'key':'natural','value':'peak'})
print("time;nodes;ways")
print("%d-%02d-%02d;%d;%d" % (y,m,d,n[0],n[1]))Vorteil: keine lokale Datenhaltung nötig. Nachteil: Belastung der Overpass-Instanz.
Die Weglänge muss man sich hinterher aber sowieso noch selbst berechnen.
edit: bugs im Programm:
* Muss noch sleep machen zwischen den "repeated requests", um nicht in Sperren zu laufen
* Debuggen von ways geht nicht, weil ich nur den Way und nicht seine nodes hole
...aber das fixen sei dem geneigten Studenten überlassen *g*
Last edited by gormo (2015-11-24 15:59:42)
OSM hat nicht das Ziel bis Ende des Monats einen vollständigen Datensatz der Welt zu enthalten.
(nach S.W.) - Aber weil die Welt vielfältig ist, weil sie auch im Detail interessant ist, mag ich genaue Karten (nach C.)
Offline
#25 2015-11-25 08:31:44
- Nico@geoloop
- Member
- Registered: 2015-11-17
- Posts: 35
Re: Statistiken der OSM Datenbank
Nico@geoloop wrote:Ich möchte für ein Uniprojekt die Veränderungen im Bereich Fußwege (z.B. highway = sidewalk, footway, usw.) dokumentieren. Im Prinzip soll es eine statistische Abbildung (Säulendiagramm) werden. Auf der X-Achse die KW und auf der Y-Achse die Anzahl (oder Längen) der für Fußgänger benutzbaren Wege.
Dafür würde ich nicht auf die API zurückgreifen um dort gefilterte Wege auszulesen, sondern wöchentlich sämtliche OSM-Daten für das ganze Gebiet holen, archivieren und dann erst filtern und auswerten. Bei dem Gebiet einer Stadt sollte das noch gut gehen. Ich würde dafür eine Datenbank basteln, aber sicher gibt es auch andere Wege.
Du wirst nämlich in einem halben Jahr feststellen, dass Du etwas wichtiges vergessen hast (*) und hast dann keine Möglichkeit mehr, das rückblickend zu korrigieren, wenn du nur vorgefilterte historischen Daten hast.
Grüße, Max
(*) Nur mal so als Beispiel: Du wirst du feststellen, dass sich die Länge der Fusswege plötzlich verdoppelt, wenn jemand (highway=*, sidewalk=both) zu getrennt gemappten Bürgersteigen ändert. Oder du hast schlicht highway=steps vergessen oder eine ungewöhnliche Kombination aus highway=* und foot=*
Hallo,
in die selbe Richtung habe ich auch schon gedacht. Allerdings wäre es schön, wenn ich auch ältere Daten nutzen könnte. Kann man den Stand der Datenbank z.B. am 1.1.2014 abfragen?
Offline