Deutschland rastern und PLZ ermitteln.

Hallo zusammen,

für ein Projekt suche ich eine Möglichkeit die Deutschlandkarte in ein 20km Raster aufzuteilen.
Von den einzelnen Quadraten benötige ich dann den Mittelpunkt und von diesem Mittelpunk die Postleitzahl (falls vorhanden).

Ich habe schon hin und her überlegt, leider habe ich noch nicht mal einen ansatzpunkt.

Hat jemand einen Tip wie ich das ganze angehen könnte? (Als nicht Mathematiker)

Das Raster und die Mittelpunkte dürften ja einfach sein. Welche PLZ-Grenze zu dem Punkt gehört, kannst Du mit PostGIS (Funktion ST_Contains für boundary=postal_code) und einer OSM-Datenbank ermitteln (siehe osmosis).

Aber ist es wirklich so sinnvoll, für einem 20km-Raster eine PLZ zu ermitteln?

Hi, und erstmal herzlich willkommen im Forum!

Tips hab ich noch nicht sondern erstmal nur Fragen:

  • Magst du uns ein wenig zu dem Projekt sagen? Privat? Schule/Uni? Firma? Wenn Firma nur Branche, Namen und so sind unwichtig. Damit könne wir ungefähr einordnem, wo es lang gehen könnte.

  • Vorhandener Rechner? Auch nur ganz grob, weil auf nem Notebook kriegst du das bestimmt nicht hin.

  • Kompjuterkentnisse? Sprachen? - und so’n Kram. geht aber auch noch später.

Gruss
walter

Da ich grade an einem ähnlichen Problem sitz (leider mit weltweiten Daten…), vielleicht zwei Ideen als Anregung:

Spatialite hat ein tesselation-Modul: Du gibtst ein Polygon, z. B. die Grenzen Deutschlands vor, und das Ding zerlegt dir die Fläche in Rechtecke, Hexagone oder Voronoj-Flächen. (siehe die Screenshots auf der verlinkten Seite)

Alternativ könntest Du’s mit QGIS und dem MMQGIS-Plugin versuchen…
Damit liessen sich ebenfalls regelmäßige Flächen errechnen (Menüpunkt Create Grid Lines Layer)

Damit hättest Du schon einmal den ersten Schritt, nämlich die Mittelpunkte. Im zweiten Schritt bräuchtest Du zu den Mittelpunkten die Postleitzahlen
Fixe Idee: der Nominatim Reverse Geocoder (Bsp. http://nominatim.openstreetmap.org/reverse?format=xml&lat=52.5487429714954&lon=-1.81602098644987&zoom=18&addressdetails=1, Doku hier http://wiki.openstreetmap.org/wiki/Nominatim#Reverse_Geocoding))

Vielleicht geht’s aber auch viel, viel einfacher mit der PLZ-Karte?

Walter, lassen sich die PLZ-Gebiete denn auch als Shape-Datei downloaden?

klaro. allerdings nur DE

Mhhhm, die naive Herangehensweise, unter https://osm.wno-edv-service.de/pcboundaries/ Deutschland aufzureissen und Select Children zu wählen hat mir grade den Browser in den Tod gerissen :smiley:

Gibt’s denn einen DE-Komplettdownload mit allen Postleitzahlengebieten?

Nö, noch nicht. Steht aber in meiner Pipeline, da der Boundaries-Export das ja inzwischen kann.

Gruss
walter

Für mich ist das nicht so einfach. Das ganze ist noch relatives Neuland.

Es soll mal eine Suche nach Servicepoints werden. Das ganze soll so Flächendeckend werden, dass ich bei der Suche IMMER mindestens einen Treffer erhalte. Ich benötige die Mitte einer solchen Rasterkachel um dort einen Servicepoint zu suchen und die Daten in meiner DB zu versenken.
Wenn nun jemand 5km weiter einen Servicepoint sucht, bekommt er min. einen Treffer.
Über Sinn und Unsinn kann man sich sicherlich streiten :stuck_out_tongue:

Ich habe auf der vorhandenen Hardware schonmal ein nominatim installiert.
Es hat etwas gedauert aber ich denke die Rechenleistung reicht.

Hmm. Kurzfassung. Ich spreche (Englisch, Deutsch), Object Pascal, PHP, JAVA, (eingerostetes C/C++) und Javascript.
Mit Computern beschäftige ich mich seit meinem 8 Lebensjahr. Das ist nun auch schon fast 30 Jahre her :slight_smile:

Trotz allem bekomme ich bei “free_as_a_bird´s” Vorschlägen erst mal Hautausschlag. Zu viel Input :slight_smile:

Das Tesselations Modul sieht schon mal nach einem Plan aus. Dafür schon mal danke.

Vielleicht denke ich aber auch viel zu quer. Eigentlich bräuchte ich nur jede 20km eine Postleitzahl.
Die opengeodb habe ich mir z.B schon angesehen aber irgendwie stehe ich komplett auf dem Schlauch.

Auf die Aktualität der PLZs würde ich mich dort nicht verlassen. Nimm OSM!

Verstehe nicht, wieso du keine Umkreissuche mit Nominatim machst. Oder möchstes du eine Liste erstellen? Dann müsstest du natürlich ganz DE “abklappern” und dir das Suchergebniss pro “Messpunkt” merken. Da kommt wohl das Raster her?

Ja, sollte. Das bedeutet für mich aber auch, dass du da eine PostGIS-DB mit OSM-Daten am Laufen hast - und das ist optimal. Denn PostGIS ist genau das Richtige dafür.

Klasse!

Ansatz: JAVA mit JDBC auf die Datenbank zugreifen lassen und dort die Daten raussuchen. In dem Programm eine Schleife von Nord nach Süd und West nach Ost laufen lassen und für jeden Messpunt die Auswertung machen.
Oder das Ganze direkt in PL/pgSQL machen. Da weiss ich aber nicht, wie du an Nominatim rankommst.

Gruss
walter

Ps: ich mach 95% meiner Sachen mit Java, JavaScript und PL/pgSQL. Als Webserver setzte ich Jetty9 von Apache ein. Das Teil arbeitet mit Servlets, die dann in Java (richtigem Java!) geschrieben sind. Sowas ähnliches wie TomCat, gaub ich.

Die Umkreissuche wird ja nachher das Ergebnis sein. Wenn ich denn die Servicepoints alle erfasst habe.
Ich benötige die Liste mit den Mittelpunkten, um den gefundenen Servicepoint dann für die Umkreissuche zu einzupflegen.

Nochmal der kurze hinweis auf mein Eingangsposting “”(Als nicht Mathematiker)“” :slight_smile:
Ich werde mir dann mal die Datenbank zu gemüte führen. Mal sehen wie weit ich damit komme.

Schon mal danke für den Schubs in die scheinbar richtige Richtung.

Wie schon angedeutet: Eine doppelte Schleife mit lat/lon, passende Schrittweiten und an der Position das PLZ-Gebiet suchen.


  for (var x=5.5;x< 16;x=x+DX)
     for (var y=47;y< 55.5;y=y+DY) {
     plz= tags->'postal_code' 
            from planet_osm_polygon 
           where st_contains((select way from planet_osm_polygon where boundary='postal_code'),st_point(x,y));
    ... 
  }

halber Pseudocode, ist also nicht per Copy/Paste zu verwenden. Aber in etwa so sollte es laufen.

den Job macht st_contains() aus Kapitel 8 von http://postgis.net/docs/manual-2.0/

Gruss
walter

ach ja: Nominatim wird hier nicht gebraucht, du solltest die DB aber mit osm2pgsql und dem üblicherweise zum Rendern verwendeten Style importieren. Nicht den Style für Nominatim nehmen, der ist total anders aufgebaut.

Solltest du aber dennoch Nominatin verwenden wollen/müssen, musst du selber sehen wie du an die PLZ-Grenzen herankommst - ich kann dir dann nicht weiter helfen.

Moin,

das einfachste dürfte sein Du versenkst die Mittelpunkte der PLZ-Gebiete in Deiner Datenbank und machst dann eine Abfrage bei der sowas steht wie “… order by dist asc limit 1” für gegebene Koordinaten.

LG,

-moenk