Algorithmus gesucht - Domänsplit

Ich habe gerade mal ein kleines Python Script geschrieben, was das reverse geocoding macht und habe versucht möglichst viele Level darzustellen. Folgende Resultate (ich habe die nodes.js von ffms verwendet):

Update: Daten zeigen jetzt nur noch Knoten, die online sind. (Stand 23.08., 21:04)

----------
----------

Administrative:
Gesamt: 513
  Deutschland: 513
    Baden-Württemberg: 2
      Regierungsbezirk Stuttgart: 2
        Verwaltungsgemeinschaft Schwaigern: 2
          Schwaigern: 2
    Niedersachsen: 13
    Nordrhein-Westfalen: 498
      Regierungsbezirk Köln: 1
        Köln: 1
          Mülheim: 1
            Mülheim: 1
              Bruder-Klaus-Siedlung: 1
      Regierungsbezirk Münster: 497
        Kreis Warendorf: 73
          Sendenhorst: 4
          Drensteinfurt: 2
          Telgte: 2
          Warendorf: 44
            Einen-Müssingen: 2
          Ostbevern: 2
          Ahlen: 2
          Beckum: 1
          Sassenberg: 1
          Ennigerloh: 15
        Kreis Recklinghausen: 1
          Castrop-Rauxel: 1
            Rauxel-Süd: 1
        Münster: 229
          Münster-West: 33
            Nienberge: 5
              Häger: 4
              Isolde-Kurz-Straße: 1
            Albachten: 7
            Sentruper Höhe: 5
            Mecklenbeck: 3
            Gievenbeck: 9
            Roxel: 4
          Münster-Mitte: 141
            Mitte-Süd: 26
              Geist: 11
              Düesberg: 5
              Aaseestadt: 6
              Schützenhof: 4
            Erphoviertel: 3
              Mauritz-West: 3
            Mitte-Nordost: 33
              Mauritz-Mitte: 2
              Herz-Jesu: 1
              Uppenberg: 11
              Hafen: 13
              Rumphorst: 3
              Klein-Muffi: 3
            Altstadt: 29
              Dom: 1
              Überwasser: 3
              Buddenturm: 1
              Martini: 13
              Aegidii: 11
            Hansaviertel: 12
              Mauritz-West: 6
              Hansaplatz: 6
            Innenstadtring: 38
              Schlachthof: 4
              Kreuzviertel: 16
              Josef: 7
              Schloss: 2
              Bahnhof: 5
              Pluggendorf: 3
              Neutor: 1
          Münster-Ost: 5
            Handorf: 1
            Gelmer-Dyckburg: 2
            Mauritz-Ost: 2
          Münster-Südost: 9
            Wolbeck: 3
            Gremmendorf: 6
              Gremmendorf-Ost: 5
          Münster-Hiltrup: 32
            Hiltrup: 26
              Hiltrup-West: 25
            Berg Fidel: 3
            Amelsbüren: 3
          Münster-Nord: 9
            Coerde: 5
            Kinderhaus: 4
              Kinderhaus-West: 4
        Kreis Steinfurt: 93
          Altenberge: 2
          Emsdetten: 16
          Nordwalde: 5
          Westerkappeln: 3
          48565: 25
            Burgsteinfurt: 16
            Borghorst: 9
          Laer: 5
          Metelen: 2
          Greven: 8
            Reckenfeld: 3
            Gimbte: 5
          Recke: 1
          Wettringen: 1
          Hörstel: 1
            Bevergern: 1
          Rheine: 4
            Eschendorf: 1
            Schotthock: 3
          Saerbeck: 10
          Neuenkirchen: 6
            Sankt Arnold: 6
          Horstmar: 1
          Lienen: 3
        Kreis Coesfeld: 85
          Dülmen: 42
            Hausdülmen: 6
            Buldern: 2
            Rorup: 30
          Lüdinghausen: 31
          Coesfeld: 2
            Lette: 1
            Goxel: 1
          Nottuln: 1
          Ascheberg: 3
            Herbern: 3
          Senden: 6
        Kreis Borken: 16
          Velen: 1
          Gescher: 3
          Ahaus: 3
            Wüllen: 2
          Stadtlohn: 2
          Reken: 3
            Maria Veen: 3
          Borken: 2
          Schöppingen: 2


----------
----------
Postal:
44577: 1
59387: 3
49536: 6
48624: 4
48565: 25
48629: 4
48465: 9
48356: 10
48231: 44
48153: 8
49082: 1
48151: 30
48157: 8
48155: 28
48734: 6
59348: 32
48159: 11
48291: 2
48683: 3
48485: 6
59227: 1
49509: 1
59320: 15
59229: 1
48341: 4
48366: 10
48301: 1
59269: 1
48249: 42
48268: 10
48308: 6
48324: 4
48369: 24
48477: 1
74193: 2
48317: 2
48432: 6
48653: 2
48346: 4
48612: 1
49504: 1
49076: 1
49219: 4
46325: 3
48167: 12
48165: 28
48163: 13
48161: 23
48145: 10
48147: 22
48712: 3
48143: 35
49846: 1
49492: 3
48493: 2
48282: 16
48429: 1
51063: 1
48703: 4
46342: 2
48336: 1
48149: 14

Ich finde die Aufschlüsselung nach Administrativen Einheiten sehr viel aufschlussreicher als nach PLZ. Ich habe das Script auf gist gepackt: ff_node_geolocation.py · GitHub
Anmerkungen: Ich habe nur quick’n’dirty etwas herumprobiert und u. a. Niedersachsen ist gar nicht weiter aufgeschlüsselt, da dort in OSM wohl eine andere Hierarchie verwendet wird. Außerdem verwende ich geopy (GitHub - geopy/geopy: Geocoding library for Python.) für den api-call.

Alles im allen scheint die Aufschlüsselung über OSM/Nominatim aber detaillierter als über Google Maps zu sein. Manchmal sind halt nicht alle Daten vorhanden. In Dülmen z. B. gibt es 49 Nodes, jedoch sind in Dülmen nicht alle Ortsteile erfasst. Sodass, wenn man die Nodes der Unterkategorien zählt nur auf 43 kommt.

2 Likes

@descilla: Ich probiere gerade dein Skript aus, leider funktioniert es bei mir nicht:

$ ./ff_node_geolocation.py 
Traceback (most recent call last):
  File "./ff_node_geolocation.py", line 7, in <module>
    from geopy.geocoders import Nominatim
ImportError: cannot import name Nominatim
$ python --version
Python 2.7.6

Das Paket python-geopy hab ich installiert. Hast du eine Idee woran es hängt?

Grüße
MPW

Wenn du geopy über apt-get install python-geopy installiert, erhältst du - zumindest als ich es getestet habe - eine älterer Version von geopy, in der OSM respektive Nominatim noch nicht enthalten ist. Daher apt-get remove python-geopy und dann via pip installieren. pip install geopy

grüße
descilla

edit: habe hier mal eine aktuelle Abfrage aller Knoten, die heute (13.09.) um 13:40 online waren gemacht:

----------
----------

Administrative:
Gesamt: 690
  Deutschland: 689
    Bayern: 2
      Mittelfranken: 1
        Erlangen: 1
      OB: 1
        Landkreis Pfaffenhofen an der Ilm: 1
          Scheyern: 1
    Baden-Württemberg: 1
      Regierungsbezirk Stuttgart: 1
        Verwaltungsgemeinschaft Schwaigern: 1
          Schwaigern: 1
    Niedersachsen: 12
    Nordrhein-Westfalen: 674
      Regierungsbezirk Köln: 1
        Köln: 1
          Mülheim: 1
            Mülheim: 1
              Bruder-Klaus-Siedlung: 1
      Regierungsbezirk Arnsberg: 1
        Dortmund: 1
      Regierungsbezirk Düsseldorf: 1
        Kreis Wesel: 1
          Rheinberg: 1
            Borth: 1
      Regierungsbezirk Münster: 671
        Kreis Warendorf: 81
          Warendorf: 46
            Einen-Müssingen: 2
          Drensteinfurt: 2
          Telgte: 4
          Ostbevern: 2
          Sendenhorst: 4
          Ahlen: 3
          Beckum: 1
          Sassenberg: 1
          Ennigerloh: 18
        Kreis Recklinghausen: 1
          Castrop-Rauxel: 1
            Rauxel-Süd: 1
        Münster: 234
          Münster-West: 33
            Nienberge: 5
              Häger: 4
              Isolde-Kurz-Straße: 1
            Albachten: 8
            Sentruper Höhe: 3
            Mecklenbeck: 3
            Gievenbeck: 10
            Roxel: 4
          Münster-Mitte: 149
            Mitte-Süd: 29
              Geist: 12
              Düesberg: 7
              Aaseestadt: 6
              Schützenhof: 4
            Erphoviertel: 3
              Mauritz-West: 3
            Mitte-Nordost: 32
              Mauritz-Mitte: 2
              Herz-Jesu: 1
              Uppenberg: 8
              Hafen: 12
              Rumphorst: 5
              Klein-Muffi: 4
            Altstadt: 30
              Dom: 2
              Überwasser: 3
              Buddenturm: 2
              Martini: 12
              Aegidii: 11
            Hansaviertel: 13
              Mauritz-West: 7
              Hansaplatz: 6
            Innenstadtring: 42
              Schlachthof: 5
              Hansaplatz: 1
              Kreuzviertel: 15
              Josef: 8
              Schloss: 3
              Bahnhof: 7
              Pluggendorf: 2
              Neutor: 1
          Münster-Ost: 4
            Handorf: 1
            Gelmer-Dyckburg: 2
            Mauritz-Ost: 1
          Münster-Südost: 9
            Wolbeck: 3
            Gremmendorf: 6
              Gremmendorf-West: 2
              Gremmendorf-Ost: 4
          Münster-Hiltrup: 30
            Hiltrup: 24
              Hiltrup-West: 23
            Berg Fidel: 3
            Amelsbüren: 3
          Münster-Nord: 9
            Coerde: 5
            Kinderhaus: 4
              Kinderhaus-Ost: 1
              Kinderhaus-West: 3
        Kreis Steinfurt: 195
          Wettringen: 18
          Emsdetten: 18
          Nordwalde: 6
          Westerkappeln: 3
          48565: 66
            Burgsteinfurt: 39
            Borghorst: 27
          Laer: 2
          Greven: 9
            Reckenfeld: 4
            Gimbte: 5
          Hörstel: 3
            Bevergern: 2
          Rheine: 23
            Gellendorf: 2
            Eschendorf: 6
            Wietesch: 2
            Dorenkamp: 2
            Rodde: 5
            Schotthock: 4
          Altenberge: 5
          Saerbeck: 16
          Neuenkirchen: 22
            Sankt Arnold: 22
          Horstmar: 1
          Lienen: 3
        Kreis Coesfeld: 115
          Dülmen: 45
            Hausdülmen: 8
            Buldern: 3
            Rorup: 30
          Lüdinghausen: 49
          Coesfeld: 4
            Lette: 2
            Goxel: 2
          Nottuln: 1
          Rosendahl: 3
          Olfen: 1
            Vinnum: 1
          Senden: 6
          Ascheberg: 6
            Herbern: 6
        Kreis Borken: 45
          Velen: 2
          Gescher: 3
          Ahaus: 2
            Wüllen: 1
          Reken: 3
            Maria Veen: 3
          Stadtlohn: 21
          Vreden: 1
          Heiden: 1
          Borken: 3
          Südlohn: 5
          Legden: 4


----------
----------
Postal:
44577: 1
59387: 6
49536: 6
48149: 12
48565: 66
48465: 9
48356: 12
44357: 1
48231: 46
48153: 9
48151: 31
48157: 8
48155: 32
48734: 5
59348: 51
48159: 9
48739: 8
48683: 2
48485: 23
46149: 1
59227: 2
59320: 18
59229: 1
46354: 15
48712: 3
48291: 5
48366: 4
48301: 1
59269: 1
48249: 45
48341: 10
48268: 12
48308: 6
48324: 4
48369: 36
51063: 1
47495: 1
74193: 1
48431: 4
48432: 17
48653: 4
48346: 4
48612: 1
49504: 1
49076: 1
49219: 4
48477: 3
48282: 18
59399: 1
48165: 26
48163: 15
48691: 1
48161: 24
48145: 12
91052: 1
48147: 24
48720: 3
48143: 36
49846: 1
49492: 3
46325: 4
48493: 36
48167: 9
48429: 6
46359: 1
48317: 2
46342: 3
48336: 1
85298: 1
48703: 37
1 Like

Danke, funktioniert jetzt. Skript läuft, bin auf die Ausgabe gespannt.

Ach ja, Ausgabe ist ja schon da. Noch besser!

Gerade Mal die Daten verglichen, irgendwie schrumpfen Münster und Warendorf.

Das kann daran liegen, dass ich unterschlagen habe, dass ich nun nur noch die Knoten berücksichtige, die online sind. Das habe ich beim ersten Posting nicht gemacht (habe die alte nodes.json noch rumfliegen gehabt und jetzt aktualisiert).

Falls du mein letztes Posting verglichen mit deiner Ausführung meinst: Die Zahl der Nodes, die online sind schwanken ja über den Tag gesehen. Habe schon überlegt, ob ich auch Nodes berücksichtige, die <24h offline sind.

Außerdem wollte ich noch einen Cache einbauen, der sich die Gebietszuordnung zu einmal abgefragten lat/lon Locations merkt. Dann sollte das beim Wiederausführen erheblich schneller sein. Denn man sollte nicht mehr als 1 Request / Sekunde an die API schicken, da man sonst automatisch blockiert werden könnte.

PS: Hast du ne Idee, in welchem Format man das Resultat am Besten ausgeben könnte?

Grüße
Simon

Hallo Simon,

also wir wollen die Aufteilung so machen, wie es hier auf Seite 12 festgelegt wurde: https://github.com/FreiFunkMuenster/media-ffms/blob/master/Vorträge/2015-08-26-WachstumsbedingteProblemeFFML.pdf

Wenn du das entsprechend automatisch gruppieren könntest, wäre das klasse. Dann kann man das wöchentlich aktualisieren und schauen, welche Gruppe am schnellsten wächst. Münster-Süd ist auf der Folie erklärt.

Alle nicht NRW-Knoten könntest du erstmal extern gruppieren und eine Summe der nicht geokodierten Knoten wäre auch super.

Grüße
MPW

1 Like

Ein Beitrag wurde in ein neues Thema verschoben: Aufteilung Münsterland