Massen-Geocodierung von 20 Millionen US-Adressen


34

Gibt es kostenlose oder kostengünstige Datenbanken für die USA, in denen gesucht werden kann und die Längen- und Breitengrade enthalten?


Schnell ist in Ordnung, aber Genauigkeit ist alles. - Wyatt Earp Beim Umgang mit einem Geocodierer gibt es einige (wie den in diesem Thread genannten), die einen niedrigen Preis für die Geocodierung vieler Adressen bieten. Wenn Sie jedoch in vielen verschiedenen Bereichen nach sehr hoher Genauigkeit suchen, müssen Sie sich entscheiden ein Premium-Geocoder. Die Ergebnisse sind konsistenter und außerordentlich genau, insbesondere wenn der postalische Abgleich nicht erfolgt. Es gibt nicht viel, mit dem Sie konkurrieren können, wenn es um die genaueste Geokodierung geht, da Ihre Berechnungen sonst nicht mit anderen Technologien

2
Sie geben Ihre Meinung über den Bedarf an hoher Qualität ab, aber keine Vorschläge. Bitte geben Sie einige Ihrer Vorschläge an, andernfalls kann die Frage des Benutzers nicht beantwortet werden.
RyanDalton

Antworten:


30

Erwägen Sie für so viele Datensätze nicht einmal einen Webdienst. Sie drosseln oder unterbrechen dich, bevor du deine Aufgabe erledigen kannst.

Dann haben Sie die Möglichkeit, es lokal auszuführen, und dafür stehen Ihnen mehrere kommerzielle oder kostenlose Optionen zur Verfügung.

Die kostenlosen Optionen verwenden den Zensus-TIGER-Datensatz, den Sie in eine räumliche Datenbank laden müssen. Sie können Bibliotheken finden, die gegen TIGER für PostGIS oder sogar SQLite geocodiert sind . Sie können ArcGIS sogar zum Geocodieren gegen TIGER verwenden. Natürlich ist ArcGIS nicht kostenlos, wodurch ich zu den nächsten kommerziellen Optionen komme. Wenn Sie über eine ArcGIS-Lizenz verfügen, verfügen Sie wahrscheinlich über eine StreetMap-DVD mit einem TeleAtlas- ( ich meine Tom Tom ) oder Navteq-Datensatz. Das hängt davon ab, ob Sie StreetMap Premium im Paket haben. Mit einem dieser beiden Datensätze erhalten Sie wahrscheinlich konsistentere Ergebnisse als mit TIGER.

Tun Sie sich selbst einen Gefallen und erstellen Sie mehrere Kopien der Straßendatenbank, sobald Ihre Daten geladen sind, und führen Sie den Geokodierungsprozess auf mehreren Computern mit einer Teilmenge der Eingabedaten aus. Versuchen Sie nicht, es auf nur einem Computer auszuführen, da Sie sonst tagelang darauf warten müssen, bis es beendet ist. Ganz zu schweigen davon, dass der von Ihnen ausgeführte Prozess wahrscheinlich mehrmals zu einem Speicherverlust und Abstürzen führt, bevor er beendet wird. Dies bedeutet, dass Sie für Ihren Prozess unterschiedliche Prüfpunkte haben möchten.


2
Es hat sich als vorteilhaft erwiesen, die Eingabe- und Adressdaten in kleinere Teile (z. B. Zustände) aufzuteilen. Dies beschleunigt die Verwendung der Locators und die Wahrscheinlichkeit, dass die Prozesse nach einer zu langen Ausführung blockieren. Es ist normalerweise nicht allzu schwierig, eine zustandsbasierte Schleife zu erstellen, um die Locator-Erstellung und Geokodierung in einem Rutsch durchzuführen.
Nathanus

26

Ich arbeite bei SmartyStreets (einem Adressprüfungsunternehmen). Unser Service ist für alle kostenlos (bis zur Grundstufe). Startups können auch verlangen, unseren Service für das erste Jahr völlig kostenlos zu nutzen. Wenn Sie dieser Klassifizierung entsprechen, ist unser unbegrenzter Service ein Jahr lang kostenlos.

Ragi rät von einem Web-Service ab, jedoch kann unsere API in ca. 5 Stunden (ca. 1000 pro Sekunde) 20 Millionen Adressen für Sie auf einfache Weise bereinigen, standardisieren und geocodieren. Ein Teil dieser Zeit hängt von der Geschwindigkeit Ihres Computers (wie viele Kerne Sie haben) und Ihrer Netzwerkverbindung ab (versuchen Sie es nicht über 3G, aber eine Standard-Breitbandverbindung reicht völlig aus).

Ich wollte nur darauf hinweisen, dass es mit einem Webservice durchaus möglich ist.

Update: Ab 1Aug2017 habe ich unseren Webdienst aus der Ferne getestet und mit nur einem einzigen 2015 MacBook pro in einem drahtlosen Netzwerk 70.000 Suchvorgänge pro Sekunde durchgeführt. Ja, es ist ziemlich schnell. Dies bedeutet, dass eine kleine Liste mit 20 Millionen Adressen nur etwa 5 Minuten benötigt.


2
Nun, wenn Sie ihn 20 Millionen Datensätze geocodieren lassen, ohne ihm einen Cent in Rechnung zu stellen, und 1000 / Requests pro Sekunde ausführen können (extrem beeindruckend), dann ist dies natürlich eine bessere Lösung, als Ihren eigenen Stack von Grund auf neu zu erstellen.
Ragi Yaser Burhum

1
Absolut. 1000 / Sekunde nicht die max. Es ist nur ein guter Standard. Multithreading, mehrere Kerne und schnellere Netzwerkverbindungen können diesen Durchsatz sogar erhöhen. Wir haben kürzlich einen gemeinnützigen Kunden, der gerade unseren Service zur Verarbeitung von 180 Millionen Adressen genutzt hat. Angesichts der bevorstehenden nationalen Wahlen versuchen viele Gruppen, ihre Adressen zu bereinigen und zu geokodieren.
Jeffrey

1
@RagiYaserBurhum Beachten Sie, dass Chris auch nach kostengünstigen Lösungen sucht. Sicher, das Erstellen eines eigenen Stacks von Grund auf ist "kostenlos", aber ist es wirklich so, wenn Sie Ihre Opportunitätskosten berücksichtigen? Der Vorteil, den Sie daraus ziehen: Möglicherweise keine Kosten ("kostenlos"). Der Vorteil der Nutzung eines vorhandenen Dienstes: Sie sparen viele Stunden und Stunden Zeit. Mit modernen Web-Architekturen (Parallelisierung) sind derzeit wahrscheinlich tausend Anfragen / Sekunde Routine, um mit ständigen Verkehrslasten fertig zu werden. Letztendlich denke ich, dass "kostenlos" und "zu vernünftigen Preisen" eine Frage der Präferenz ist.
Matt

1
@Matt Hands down "frei" ist nicht immer frei. Ich werde nicht dagegen argumentieren (Ihre Zeit ist Geld wert). Mir ist bewusst, dass die Kosten für die meisten Open-Source-Lösungen tatsächlich eine Verschiebung des Kostenmodells von Nutzungslizenzen zu Supportdiensten sind. Ich habe nicht versucht, ironisch zu sein, ich denke, wenn Jeffey die Lösung kostenlos (oder sogar zu vernünftigen Preisen) anbieten kann, ist dies die bessere Lösung. Am besten aufgeführten Preis von SmartyStreets, 20m Punkte würde 100.000 $ kosten. Ich bin mir sicher, dass sie auch für kommerzielle Anwendungen einen Bruchteil der Kosten verursachen können.
Ragi Yaser Burhum

1
Auch 1000 / req pro Sekunde, was in zeitgenössischen Architekturen sehr gut möglich ist, würde für die Geokodierung immer noch eine großartige Technik erfordern . Sie bekommen meine Requisiten dafür :)
Ragi Yaser Burhum

8

In dieser exemplarischen Vorgehensweise wurde beschrieben, wie ein Postgis-Geocoder mit 2010 TigerLine-Daten erstellt wird. Ich führe es gerade aus - es ist nicht schnell, da es 3 Wochen dauern wird, bis 2 Millionen Adressen geocodiert sind.

Es ist jedoch kostenlos, nicht gedrosselt und es dauerte weniger als 2 Tage, bis jemand mit minimalen Codierungs- und Postgres-Kenntnissen die Daten eines (großen) Staates eingerichtet und geladen hatte, um mit der Geocodierung zu beginnen. Ich habe auch absolut kein Postgres-Tuning für das System durchgeführt und es läuft über NFS-Mounts, daher vermute ich, dass es ein oder zwei Größenordnungen an Leistungssteigerungen gibt, die ich herausholen könnte, wenn ich muss.

Anstatt Webservices zu verwenden, habe ich alle meine Adressen in die postgres-Datenbank geladen und dann ein schnelles und unsauberes Perl-Skript ausgeführt, um sie alle nacheinander zu geocodieren:

perl -e for ($i=1; $i<[max_key_value]; $i+=1) 
   {printf "UPDATE source_addresses
               SET (rating, new_address, lon, lat) 
                     = (g.rating, pprint_addy(g.addy), 
                       ST_X(g.geomout), ST_Y(g.geomout) ) 
              FROM (SELECT DISTINCT ON (address_id) address_id, (g1.geo).* 
                      FROM (SELECT address_id, (geocode(address)) As geo 
                              FROM source_addresses As ag 
                             WHERE ag.rating IS NULL and address_id = $i 
                           ) As g1 
                     ORDER BY address_id, rating LIMIT 1
                   ) As g WHERE g.address_id = source_addresses.address_id;\n"
  } | psql -d geocoder 

(Zeilenumbrüche nur zur besseren Lesbarkeit)

Dadurch wird eine Update-Anweisung "Geocodierung der Adresse mit diesem ID-Wert und Verwendung der besten Übereinstimmung" generiert und an psql weitergeleitet, um dies zu tun. Es wird nur versucht, Adressen ohne Bewertung zu geocodieren, dh solche, die noch nicht geocodiert sind. Es kann also neu gestartet werden, und jeder Vorgang wird unabhängig durchgeführt.


Haben Sie festgestellt, dass die TigerLine-Daten 2010 für einige Adressen nicht korrekt sind?
Chris Muench

Es sind keineswegs perfekte Daten. Die Adressdaten, die ich habe, sind jedoch aus qualitativer Sicht abscheulich. Der geschriebene Geocodierer liefert ein "Bewertungs" -Feld, in dem niedriger besser ist. Ich werde meiner Antwort ein Beispiel hinzufügen.
Adam Musch

@ChrisMuench: Wenn Sie mir ein oder zwei kalifornische Adressen geben, würde ich sie gerne durch meinen Geocoder schießen, um Ihnen zu zeigen, dass ich sie nicht auswähle.
Adam Musch

Nun, ich habe den Postgis-Geocoder für eine Adresse in New York ausprobiert, und sie könnten etwa 500 Fuß bis 1 Meile entfernt sein
Chris Muench

Dies ist zu spät für Sie, aber jemand anderes könnte es nützlich finden ... Stellen Sie sicher, dass Ihre Adresse gut analysiert wird. Ich fand heraus, dass meine einfach verkettete "123 Oak St. Anytown ST 12345" um das 550-fache beschleunigt wurde, als ich Kommas hinzufügte: "123 Oak St., Anytown, ST, 12345"
aaryno

3

Ich vermute, Sie wollen Geocode, zahlen aber nichts dafür? Es gibt eine Reihe von Diensten, für die Sie 20 Millionen Datensätze geocodieren können, die Sie jedoch kosten. Esri, Pitney Bowes und andere bieten diese Dienste im Abonnement oder zu einem Preis pro x Geocodes an. 20 Millionen sind nicht trivial, aber ich gehe davon aus, dass es dafür einen Business Case gibt.



3

Dieser Beitrag ist wahrscheinlich zu spät, um dem Originalposter zu helfen. Wenn Sie jedoch große Datenmengen kostenlos georeferenzieren möchten, können Sie sich meine Software "Easy Georeferencer" ansehen, die unabhängig erstellt, benutzerfreundlich und dennoch leistungsstark ist (siehe Screenshot unten im Beitrag).

Das Programm ist einfach und unkompliziert zu bedienen und wird direkt von einer exe-Datei ausgeführt, für die keine Installation erforderlich ist. Sie können zwischen der GNS- oder der GeoNames-Datenquelle wählen und Sie können das tun, was bisher kein anderer Geocoder kann. Sie können Provinzen basierend auf der Datenbank der GADM-Verwaltungseinheiten geocodieren und historische Ländergrenzen aus dem CShapes-Dataset geocodieren. Die einzige Einschränkung ist, dass Adressdaten nicht geocodiert werden. Alle Ausgaben werden als Shapefiles zur sofortigen Visualisierung / Analyse in einem GIS geliefert.

Im Hinblick auf die Effizienz und den Umgang mit großen Datenmengen wurde das Programm getestet, um 100.000 Datensätze in nur 3 Stunden zu geocodieren. Bei größeren Datensätzen sollte der erwartete Anstieg der Verarbeitungszeit krummlinig abnehmen, da ein Großteil der Verarbeitungszeit nur in die Anfangsphase geht, in der die Länderreferenzdatensätze geladen werden, aber erst danach abgerufen wird. Darüber hinaus müssen Sie sich keine Gedanken über Engpässe im Internet oder Konnektivitätsprobleme machen, wenn Sie große Datenmengen geokodieren, da die Software, Referenzdatenmengen und die Verarbeitung alle auf dem lokalen Computer basieren. Übereinstimmungsraten können bis zu 80-90 Prozent betragen, da sie auf der Fuzzy-Namensabstimmung basieren, die Rechtschreibunterschiede berücksichtigt.

Weitere Details, einschließlich eines Einführungspapiers und eines Leitfadens für Anfänger, sind im Download-Paket enthalten. Sie müssen nicht zögern, es zu versuchen. Das Programm ist nur eine einfache Datei, die Sie auf Ihrem Desktop ablegen und ausführen können, ohne dass Ihr Computer unübersichtlich wird.

Die Software kann von folgender Adresse heruntergeladen werden: http://geocodeanything.wordpress.com/

Hoffentlich hilft das.

Bildbeschreibung hier eingeben


Sie sollten immer angeben, dass dies der Autor / Entwickler und / oder das Werk des Unternehmens ist, das ein Softwareprodukt herstellt.
RyanDalton

@ RyanDalton Ich gab bekannt, dass ich der Autor war, als ich "Software, die ich erstellt habe" schrieb, obwohl ich sehen kann, wie es unbemerkt geblieben sein könnte, weil es im Satz nicht viel Nachdruck gab. Habe meinen Wortlaut geändert, um hoffentlich klarer zu machen, dass ich meine eigene Software gutheiße.
Karim Bahgat

2

Da Sie US-Adressen geokodieren, sollte das Tool " Straße zu Koordinaten" aus dem Data Science Toolkit für Sie geeignet sein.

This API takes either a single string representing a postal address, or a JSON-encoded  
array of addresses, and returns a JSON object with a key for every address. The value 
for each key is either null if no information was found for the address, or an object 
containing location information, including country, region, city and latitude/longitude 
coordinates.

Möglicherweise möchten Sie die virtuelle Maschine herunterladen und von Ihrer eigenen Hardware ausführen. Auf diese Weise müssen Sie sich keine Gedanken über API-Beschränkungen machen und steuern diese auch. Oh und habe ich gesagt, dass es kostenlos ist? ;-)


Das ist ziemlich erstaunlich! Ich bin überrascht, dass ich noch nie davon gehört habe. Außerdem ist es großartig, dass Sie die VM herunterladen und sie bereits auf Ihrem eigenen System ausführen können.
RyanDalton

Es ist auch Open Source. :) github.com/petewarden/dstk
RK

2

Ich habe keinen Hinweis auf die Genauigkeit, die Sie benötigen, gesehen, aber ich gehe davon aus, dass Sie einen langen Lat auf dem Dach oder in der Nähe davon wünschen. Die Qualität der Eingangsadresse kann ebenfalls ein Faktor sein. Eine gut bereinigte Adressenliste codiert besser und schneller als eine Liste unvollständiger oder falscher Adressen. Ist eine Trefferquote von 90% akzeptabel oder müssen alle 20 Millionen Adressen codiert werden? Ich habe keine kostenlose Lösung, aber es gibt eine relativ kostengünstige, die ich kenne und verwende. ZP4 von Semaphore Corp, http://www.semaphorecorp.com/bietet einen Adress-Scrubber / Geocoder und Add-Ons, die die Adressen verarbeiten und eine bereinigte Adresse zurückgeben, ein Flag, das angibt, ob die Adresse von USPS zugestellt werden kann, und den langen Lat für die Postleitzahl + 4. Die Genauigkeit von ZIP + 4 entspricht im Allgemeinen der Genauigkeit auf dem Dach in bebauten Gebieten (richtige Straßenseite und auf dem richtigen Block) und nicht der Genauigkeit in ländlichen Gebieten. Die Kosten für eine 30-Tage-Lizenz betragen 120 US-Dollar. Nach dieser Zeit funktioniert der Adress-Scrubber weiterhin, die Delivery Point Validation (DPV) und die Geo Returns funktionieren jedoch nicht. Mit einem relativ schnellen Computer, der in den letzten zwei Jahren gebaut wurde und auf den alle Daten lokal gespeichert sind und auf die zugegriffen werden kann, sollten die 20 Millionen Datensätze in etwa 10 Tagen erstellt werden. Ich habe in den letzten 15 Jahren Adressen geocodiert und ich habe die meiste Zeit ZP4 verwendet. Bevor sie Long-Lat oder DPV anboten,


2

Ich bin gerade dabei, 18 Millionen Adressen zu geokodieren, also möchte ich mein Setup teilen.

Grundsätzlich habe ich ein Ansible-Playbook verwendet, um die Amazon EC2-Instanz als PostGIS Tiger Geocoder-Server einzurichten. Anschließend habe ich mithilfe eines Skripts Geocodierungsadressen im Stapel verarbeitet und sie dem Zensusblock zugeordnet.

Die Kosten für Amazon EC2: Mindestanforderung 180G SSD kosten ca. 18 US-Dollar / Monat. Meine t2.large-Instanz kostete insgesamt etwa 90 US-Dollar pro Monat.

Wenn Sie eine Linux-Box mit SSD> 180G haben, können Sie diese grundsätzlich auch kostenlos nutzen.

Meine durchschnittliche Leistung beträgt etwa 170 bis 300 ms / gute Adresse, 400 bis 600 ms / schlechte Adresse. Mit schlechter Qualität meine ich, dass viele von ihnen eine fehlende oder falsche Stadt, Postleitzahl oder sogar nur eine falsche Adresse haben. Diese Art von Adresse benötigt viel mehr Zeit für die Geokodierung, sodass Ihre Leistung von der Qualität der Eingabe abhängt. Die von mir verwendete Amazon EC2-Instanz kann in einem Monat etwa 4 Millionen wirklich schlecht formatierte Adressen geocodieren.

Weitere Informationen finden Sie in meinem Blogbeitrag über das System-Setup und die Skripte



1

Wenn sich Ihr Workflow in Python befindet, ist Geopy eine großartige Lösung. Sie können Ihre grundlegende Geokodierungslogik abstrakt schreiben und dann einen von vielen Anbietern auswählen (ArcGIS, Baidu, Bing, DataBC, GeocodeFarm, GoecoderDotUS, GeoNames, Google, IGN Frankreich, LiveAddress, NaviData, Nominatim (OSM), OpenCage, OpenMapQuest, (Yahoo! BOSS Place Finder, What3Words, Yandex ... puh). Sie können sogar alle verwenden und letztendlich den Punkt auswählen, der das höchste Vertrauen in die Richtigkeit aufweist, indem er von mehreren Geokodierungsdiensten validiert wird. Viele dieser Dienste erfordern eine Registrierung (aber nicht alle). Sie sind möglicherweise nicht gleichermaßen für die Verwendung in den USA geeignet, aber der Vorteil einer sauberen Python-Funktion besteht darin, dass Sie dies steuern können sollten.

Hier ist ein kurzes Beispiel:

from geopy.geocoders import Nominatim
geolocator = Nominatim(country_bias='New Zealand', timeout=4)
geocoded = geolocator.geocode('Raglan, Waikato', exactly_one=True)
if geocoded is not None:
    # success
    lat = geocoded.latitude
    lon = geocoded.longitude

https://geopy.readthedocs.org/en/1.10.0/

Wirklich ist der einzige schwierige Teil, sicherzustellen, dass Ihre Adressen nicht schlecht gebildet werden. Das Geocodieren von 20 Millionen Standorten wird jedoch wahrscheinlich noch eine beträchtliche Zeit in Anspruch nehmen ... und diese Art von Ladung wird wahrscheinlich gegen die Nutzungsbedingungen von Personen verstoßen. Hoffe das hilft aber jemandem.


Kann ich damit eine CSV verwenden?
Salman

Klar, wenn du es mit Python liest.
Alphabetasoup

0

Wenn Ihre Geocodierungsanforderung 2.500 pro Tag nicht überschreitet, können Sie die Google Geocoding-API verwenden . Sie sollten einen Blick auf api werfen, es kann zu Ergebnissen wie json oder xml zurückkehren.

Nutzungslimit:

Die Verwendung der Google Geocoding-API unterliegt einem Abfragelimit von 2.500 Geolocation-Anfragen pro Tag. (Benutzer von Google Maps API for Business können bis zu 100.000 Anforderungen pro Tag ausführen.)

Beispiel:

http://maps.google.com/maps/geo?key=yourkeyhere&output=json&q=520+3rd+Street+San+Francisco+CA

Beispiel Ergebnis:

{
  "name": "520 3rd Street San Francisco CA",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "address": "520 3rd St, San Francisco, Kaliforniya 94107, Amerika Birleşik Devletleri",
    "AddressDetails": {
   "Accuracy" : 8,
   "Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "CA",
         "SubAdministrativeArea" : {
            "Locality" : {
               "LocalityName" : "San Francisco",
               "PostalCode" : {
                  "PostalCodeNumber" : "94107"
               },
               "Thoroughfare" : {
                  "ThoroughfareName" : "520 3rd St"
               }
            },
            "SubAdministrativeAreaName" : "San Francisco"
         }
      },
      "CountryName" : "USA",
      "CountryNameCode" : "US"
   }
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 37.7826364,
        "south": 37.7799384,
        "east": -122.3942267,
        "west": -122.3969247
      }
    },
    "Point": {
      "coordinates": [ -122.3955757, 37.7812874, 0 ]
    }
  } ]
}

und Sie können einige Beispiel-Links für die Geokodierung von Google überprüfen:

1. Single Code

2. GeoCoding umkehren

3. Beginnen Sie mit Google GeoCoding

Ich hoffe es hilft dir


15
Das würde nur 22 Jahre (8.000 Tage) dauern, um 20 Millionen Standorte zu geokodieren. Absolut vernünftige Lösung.
Andy W

Ich weiß das und ich habe ausgedrückt, wenn seine Geocode-Anfrage 2.500 pro Tag nicht überschreitet, kann er es verwenden ... Dies ist eine Option, wenn er keine Lösung finden kann
Aragon

4
Dies verstößt gegen die Nutzungsbedingungen. Dies ist nur dann zulässig, wenn Sie die Ergebnisse auf einer Google Map anzeigen. Selbst wenn Sie das tun, finde ich das "Caching-Argument", das manche Leute für 20 Millionen Features verwenden!
Ragi Yaser Burhum
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.