Gibt es kostenlose oder kostengünstige Datenbanken für die USA, in denen gesucht werden kann und die Längen- und Breitengrade enthalten?
Gibt es kostenlose oder kostengünstige Datenbanken für die USA, in denen gesucht werden kann und die Längen- und Breitengrade enthalten?
Antworten:
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.
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.
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.
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.
Der Speicherort Ihrer Daten ist sehr wichtig, da sich die Qualität der Webdienste ändert (Genauigkeit, Skalierung usw.). Ich habe meine Adresse von Google API, Facebook API und Ex-SimpleGeo mit meiner Geodatabase geocodiert.
http://blog.programmableweb.com/2012/06/21/7-free-geocoding-apis-google-bing-yahoo-and-mapquest/
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.
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? ;-)
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,
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
AWS verfügt jetzt über eine Reihe von Geocodierungsservern. Holen Sie sich Ihren eigenen Server und sichern Sie Ihre Daten dort. https://aws.amazon.com/marketplace/search/results/ref=dtl_navgno_search_box?page=1&searchTerms=geocode
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.
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:
3. Beginnen Sie mit Google GeoCoding
Ich hoffe es hilft dir