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

Uploaded Source

File details

Details for the file pyGeoDb-1.0.tar.gz.

File metadata

  • Download URL: pyGeoDb-1.0.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pyGeoDb-1.0.tar.gz
Algorithm Hash digest
SHA256 1230e914ccc0e1c33ce21971339d61dcde4a0140e0adbf5755ac3e2d753b6a8c
MD5 a888e2c5db88568cd90f00a73af9bf2b
BLAKE2b-256 d694cbd963abdd674177678f5b0e7c90175fa34509e7ab51898004e83ed47d3e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page