You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
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?



TEL0000 wrote:

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?


Nakaner wrote:

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;


SammysHP wrote:

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

Nico@geoloop wrote:

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. wink


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

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

#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.


Joachim Moskalewski wrote:

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.



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

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

#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.


SammysHP wrote:
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?

TEL0000 wrote:

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.


gormo wrote:

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

Nico@geoloop wrote:

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

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=*

Offline

#23 2015-11-24 11:14:22

mmd
Member
Registered: 2010-11-06
Posts: 2,150

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).

Offline

#24 2015-11-24 13:39:53

gormo
Member
Registered: 2013-08-01
Posts: 2,119
Website

Re: Statistiken der OSM Datenbank

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

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

Board footer

Powered by FluxBB