Die Vermessung Deutschlands

In Gedenken an Gauß bekam ich für ein etwas größeres Projekt die Aufgabe „Programmier mal ’ne Distanzsuche für Postleitzahlen„. Hört sich einfach an, weil ja fast jedes Webportal so etwas anbietet, ist es dann aber doch nicht.


Es gibt die OpenGeoDB, in der zwar sämtliche Ortschaften Deutschlands enthalten sind, aber die Geokoordinaten für PLZen in größeren Städten sind identisch, sprich: Alle Entfernungen innerhalb von Berlin betragen 0km! Zudem ist die OpenGeoDB zu komplex für meine Aufgabe. Also weiter gesucht und schließlich in diesem exzellenten Blog gelandet.
Diese Vorgehensweise schien mir schon mehr Sinn zu machen, obwohl ich mir dafür den PostgreSQL-Server installieren musste. Was wird in diesem Blog beschrieben? (In Kurzform:)

  1. Für jede PLZ sind die Grenzen des PLZ-Gebietes in einer DB gespeichert.
  2. Diese Daten werden mit der Postgis-Erweiterung umgerechnet, so dass man für jede PLZ den Mittelpunkt als Geokoordinaten errechnet.
  3. Will man nun die Entfernung zwischen zwei PLZ errechnen, muss man die Orthodrome (kürzeste Verbindung zweier Punkte auf einer Kugeloberfläche) errechnen mit folgender Formel: , die dann noch mit dem Erdradius malgenommen werden muss.

Dann hätte man also die Entfernung von zwei PLZ zueinander. Für eine Distanzsuche allerdings, benötigt man sämtliche Distanzen von einer fest vorgegebene PLZ zu jeder anderen – was schlappe 8270 Berechnungen macht, denn so viele PLZen gibt es. Und 8270 Berechnungen dauern eine Weile.

Meine Strategie: Berechne sämtliche Distanzen und speichere das Ergebnis in die Datenbank. Bei 8270 PLZen macht das allerdings 68 Millionen Einträge in die Datenbank. Etwas viel und selbst mit einem schnellen Rechner dauert das…
Doppelte Einträge (in der Tabelle
PLZ_von | PLZ_nach | Distanz
kommt die Zeile
27367 | 20146 | 80,1
wie auch
20146 | 27367 | 80,1
vor) wollte ich nicht herausnehmen, da das die Abfrage unnötig erschwert hätte. Zudem wäre es keine Lösung der zu großen Tabelle, denn selbst 34 Mio Einträge sind noch zu viele. Also habe ich mit Absprache des Auftraggebers die maximal anzugebene Entfernung bei der Distanzsuche auf 80 km gesetzt und nur noch bis zu dieser Entfernung die Ergebnisse in die Datenbank gespeichert, was etwa 4 Mio Einträge macht. Auch viel, aber eine akzeptable Anzahl.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.