Skip to main content

distance calculation based on ZIP codes and map generation

Project description

PyGoeDb is an Python Interface to OpenGeoDb. It is all about Austrian, German and Swiss Postcodes and City location. The rest of this documentation is in german Language.

Die ist ein Python Interface zu OpenGeoDb. “Im Mittelpunkt des Projektes OpenGeoDB steht der Aufbau einer möglichst vollständigen Datenbank mit Geokoordinaten zu allen Orten und Postleitzahlen (bisher: A,B,CH,D und FL).” (OpenGeoDB Wiki) Die Datenbank wird überwiegend zur Umkreissuche oder zur (groben) Geocodierung verwendet. In der PHP-Welt wird es fast ausschliesslich mit GeoClassPHP verwendet. Für Python gibt es bisher keine weit verbreitete Lösung.

Zusätzlich hilft PyGeoDb bei der Erstellung zon Postleitzahlen Karten. Dazu werden neben den OpenGeoDb Daten auch Informationen aus Openstreetmap herangezogen.

Nutzung

Entfernungsberechnung

PyGeoDb kann die Entfernung in Metern zwischen zwei Postleitzahlenbereichen berechnen. Dazu kann direkt eine Postleitzahl als String, ein dict, oder ein Objekt, dass dem AddressProtocol entspricht, übergeben werden:

>>> import pygeodb
>>> pygeodb.distance("42897", "50933") # Strings
38131

>>> pygeodb.distance({'plz': "42897"}, {'plz': "48143"}) # dicts
90478

>>> class LocationObject(object): pass
>>> loc = LocationObject()
>>> loc.plz = "50933"
>>> pygeodb.distance(loc, "48143") # Objekte
124737

Sortieren nach Entfernung

pyGeoDb kann eine Liste von Postleitzahlen nach der Entfernung zu einer bestimmten Postleitzahl sortieren. Dabei können, Strings sowie Dicts und Objekte nach dem AddressProtocol gemischt werden:

>>> pygeodb.nearest("42897", ["42477", "48143", {'plz': "45149"}, loc]) #doctest: +ELLIPSIS
['42477', {'plz': '45149'}, <__main__.LocationObject object ...>, '48143']

Wenn es relevant ist, wie weit die verschiedenen Postleitzahlen entfernt sind, kann auch dies mit zurück gegeben werden:

>>> pygeodb.distances("42897", ["50933", "42477", "48143", "45149", "42897"])
[(0, '42897'), (7200, '42477'), (34466, '45149'), (38131, '50933'), (90478, '48143')]

Fehlerbehandlung

Wenn eine Postleitzahl unbekannt ist, wird eine ValueError() Exception ausgelößt:

>>> pygeodb.distance("42897", "99999") # Strings
Traceback (most recent call last):
    File "<stdin>", line 1, in ?
ValueError: Unknown PLZ: DE-99999

Kartengeneriertung

pyGeoDb kann Postleitzhalenkarten generieren. Dazu kommt die Graphikbibliothek Pycairo zum Einsatz, die natürlich vorher installiert sein muss. Karten können im PDF, PNG, EPS und SVG Format erstellt werden.

Es gibt keine freie Datenquelle zu Grösse und Form der einzelnen Postleitzahlenbereiche. Jedoch kann man sich der Form der Postleitzahlenbereiche annähern, indem man ein Voronoi-Diagramm erzeugt. Dies weicht im Detail zwar deutlich von den realen Postleitzahlenbereichen ab, reicht aber für Visualisierungsaufgaben aus. Zur Erzeugung des Graphen, der die Postleitzahlenbereiche unterteilt, wird der “Fortune Algorithmus” werwendet.

Rufen Sie ./plz_draw –help auf, um die Aufrufparameter angezeigt zu bekommen. Beispieldateien kann man durch das Kommando make maps erstellen - die entsprechenden kommandos finden sich in der Datei Makefile unten.

Autoren

Der ursprüngliche Entfernungsberechnungscode wurde in 2007 von Christian N Klein entwickelt. Die Voronoi Berechnung basiert auf Code von Steve Fortune, der von Shane O’Sullivan in C++ und dann von Bill Simons in Python konvertiert wurde.

Die Datengrundlage für die Polstleitzahlebereiche stammt vom OpenGeoDb Projekt. Die Deutschen grenzen stammen aus Openstreetmap Project Germany.

Die Kartengenerierung stammt von Maximillian Dornseif und basiert auf seinem Projekt zipdecode.de, dass auf Code aus Ben Frys Buch Visualizing Data beruht.

Alternativen & Quellen

d9t.gis ist ein sehr Zope-Lastiges Python Projekt zur Entfernugnsberechnung mit OpenGeoDb Daten.

Es gibt jede Menge Online-Distanzberechnungsdienste, z.B:

Umfangreiche Informationen zum deutschen Postleitzahlensystem inklusive freier Rasterkarten gibt es bei Wikipedia.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyGeoDb-1.0.tar.gz (1.4 MB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page