2017-01-05 1 views
3

Es gibt viele Artikel zu diesem Thema, aber ich konnte keine finden, die meinen Bedürfnissen entsprechen. Das einzige, was ich brauche, ist eine Liste von Postleitzahlen innerhalb eines Umkreises von x Meilen von einer anderen Postleitzahl zu bekommen. Ich habe keine Postleitzahlen-Datenbank, und obwohl es einen kostenlosen Dienst gibt, der genau das tut, was ich brauche (http://postcodes.io/), hat er eine Deal-Breaker-Beschränkung (max Radius = 2km), also kann ich ihn wirklich nicht benutzen.Wie kann ich eine Postleitzahl mit einer Postleitzahl (oder Koordinaten) und einem Radius erhalten?

Ich denke, vielleicht muss ich Google Maps API genauer betrachten, ich glaube, es könnte bieten, was ich brauche, aber es ist nicht klar aus der Dokumentation und es ist sehr konzentriert in Karten (die mir egal ist jetzt). Wenn jemand etwas Licht werfen könnte, würde ich es sehr schätzen.

Dies ist für ein C# -Projekt, so dass alle nützlichen Bibliotheken willkommen sind.

Antwort

4

Laden Sie eine Datenbank mit Postleitzahlen herunter, z. this one oder this one. Wenn Sie hohe Genauigkeits- und Vollständigkeitsanforderungen an die Daten haben, berücksichtigen Sie buying access to the official database. Sie können fehlende Koordinaten mit Google's GeoCoding API abrufen. Wenn Sie mehr Codes als das erlaubte tägliche freie Kontingent lösen müssen, würde ich empfehlen, ein größeres Kontingent zu kaufen, es ist ziemlich billig. Google deckt dies in der Dokumentation ab.

Sobald Sie die Datenbank haben, speichern Sie sie in einer SQL-Datenbank mit Geo-Erweiterungen, z. Postgis, und führen Sie dann die Suchvorgänge mithilfe von SQL aus, oder führen Sie eine Vorverarbeitung in einem Formular durch, das das schnelle Nachschlagen benachbarter Postleitzahlen ermöglicht. Nach meiner Erfahrung ist die beste Möglichkeit für die Suche nach Postleitzahlen, einen Overhead hinzuzufügen und eine Hashmap von postcode → [ (postcode, distance), (postcode, distance), .. ] Relationen zu speichern, mit den Listen, die jede Postleitzahl für den größten Radius enthalten, den Sie je suchen werden. Verwenden Sie also keine Baumdurchsuchung bei Ihren Suchen. Für die Koordinaten-zu-PLZ-Beziehung können Sie entweder eine ausgeklügelte Datenstruktur für räumliche Daten verwenden, wie BSP tree, oder einfach halten und eine grobe 2D-Gitterstruktur verwenden, wobei jeder Knoten alle Postleitzahlen enthält, die innerhalb des zugehörigen Quadrats innerhalb des Gitters liegen .

2

Um die akzeptierte Antwort zu ergänzen, stellt postcodes.io auch eine pg_dump des verwendeten Datasets zur Verfügung (erfordert Postgresql mit aktiviertem Postgis).

Sobald Sie die Datei heruntergeladen und entpackt haben, wird ein Postgresql-Wiederherstellungsvorgang, z. $ cat postcodeiodb.sql | psql postcodesiodb ist alles was Sie brauchen, um den gesamten Datensatz zu importieren. Keine zusätzlichen Import-Skripts erforderlich. Darüber hinaus erstellt pg_dump alle notwendigen Schemas & Indizes für Sie. https://github.com/ideal-postcodes/postcodes.io/blob/master/latest

Haftungsausschluss: Ich behaupte postcodes.io

+0

Sehr gut zu wissen, danke

Das Projekt einen Zeiger auf die neuesten Daten-Set hier hält! – Fabio

Verwandte Themen