Geocodice in blocco 20 milioni di indirizzi statunitensi


34

Esistono database gratuiti oa prezzi ragionevoli per gli Stati Uniti che possono essere cercati e restituire informazioni su latitudine e longitudine?


Il veloce va bene, ma la precisione è tutto. - Wyatt Earp Quando si ha a che fare con un geocoder, ce ne sono alcuni (come uno a cui si fa riferimento in questo thread) che offrono un prezzo basso per geocodificare molti indirizzi, ma se stai cercando una precisione molto fine in molte aree diverse, devi andare con un geocoder premium. I risultati saranno più coerenti e straordinariamente precisi, soprattutto quando non si verifica la corrispondenza postale. Non c'è molto con cui puoi competere quando si tratta del geocodifica più accurato, altrimenti i tuoi calcoli non saranno all'altezza di altre tecnologie che offrono agli utenti t

2
Offri la tua opinione sulla necessità di alta qualità, ma nessun suggerimento. Fornisci alcuni dei tuoi suggerimenti, altrimenti non aiuta a rispondere alla domanda degli utenti.
Ryan Dalton,

Risposte:


30

Per così tanti record, non prendere nemmeno in considerazione un servizio web. Ti rallenteranno o ti taglieranno prima che tu possa finire il tuo compito.

Quindi la tua opzione diventa quella di eseguirla localmente, e per questo hai diverse opzioni commerciali o gratuite.

Le opzioni gratuite utilizzeranno il set di dati TIGER del censimento che dovrai caricare in un database spaziale. Puoi trovare librerie che geocodificano con TIGER per PostGIS o anche con sqlite . Diamine puoi persino usare ArcGIS per geocodificare TIGER. Naturalmente, ArcGIS non è gratuito, il che mi porta alle prossime opzioni commerciali. Se hai una possibilità di licenza ArcGIS, hai un DVD StreetMap con un set di dati TeleAtlas ( intendo Tom Tom ) o Navteq. Dipende se hai StreetMap Premium in bundle. Ognuno di questi due set di dati ti darà probabilmente risultati più coerenti di TIGER.

Fatti un favore e crea diverse copie del database di strada una volta caricati i tuoi dati ed esegui il processo di geocodifica su più macchine con un sottoinsieme dei dati di input. Non tentare di eseguirlo su una sola macchina o aspetterai per giorni che finisca, per non parlare del fatto che molto probabilmente qualsiasi processo che eseguirai probabilmente perderà memoria e si arresterà in modo anomalo più volte prima che finisca. Ciò significa che si desidera avere diversi punti di controllo per il processo.


2
Ho trovato utile dividere l'input e indirizzare i dati in porzioni più piccole (come gli stati). Ciò rende i localizzatori più veloci da utilizzare e i processi hanno meno probabilità di bloccarsi dopo l'esecuzione per troppo tempo. Di solito non è troppo difficile scrivere un ciclo basato sullo stato per creare la localizzazione e geocodificare in un colpo solo.
Nathanus

26

Lavoro a SmartyStreets (una società di verifica dell'indirizzo). Il nostro servizio è gratuito per tutti (fino al livello base). Le startup possono anche richiedere di utilizzare il nostro servizio completamente gratuito per il primo anno. Quindi, se rientri in quella classificazione, non ci sono costi per il nostro servizio illimitato per un anno ..

Ragi sconsiglia un servizio web, tuttavia, la nostra API può facilmente pulire, standardizzare e geocodificare 20 milioni di indirizzi per te in circa 5 ore (circa 1000 al secondo). Un po 'di quel tempo dipenderà dalla velocità della tua macchina (quanti core hai) e dalla tua connessione di rete (non provarla su 3G, ma una connessione a banda larga standard andrà bene).

Volevo solo sottolineare che è certamente possibile con un servizio web.

Aggiornamento: a partire da 1Aug2017, ho testato a distanza il nostro servizio Web e ho ottenuto 70.000 ricerche al secondo con un solo MacBook Pro 2015 su una rete wireless. Sì, è abbastanza veloce. Ciò significa che un piccolo elenco come 20 milioni di indirizzi richiederebbe solo circa 5 minuti.


2
Bene, se hai intenzione di lasciargli geocodificare 20 milioni di record senza caricargli un centesimo e puoi fare 1000 / richieste al secondo (estremamente impressionante), ovviamente questa è una soluzione migliore che costruire il tuo stack da zero.
Ragi Yaser Burhum

1
Assolutamente. 1000 / secondo non il massimo. È solo un buon livello. Il multithreading, più core e connessioni di rete più veloci potrebbero persino aumentare tale throughput. Abbiamo un recente cliente senza scopo di lucro che ha appena utilizzato il nostro servizio per elaborare 180 milioni di indirizzi. Con l'incombere delle elezioni nazionali, molti gruppi stanno cercando di ripulire e geocodificare i loro indirizzi.
Jeffrey,

1
@RagiYaserBurhum Nota che Chris è anche alla ricerca di soluzioni "a prezzi ragionevoli". Certo, costruire il tuo stack da zero potrebbe essere "gratuito", ma lo è davvero, se consideri il tuo costo opportunità? Il vantaggio che si ottiene facendo tutto da soli: potenzialmente nessun costo ("gratuito"). Il vantaggio di utilizzare un servizio esistente: risparmiare molte ore e ore di tempo. Inoltre, oggi migliaia di richieste / secondo sono probabilmente di routine con le moderne architetture Web (parallelizzazione) per gestire carichi di traffico costanti. Alla fine, penso per questo, "libero" e "a prezzi ragionevoli" è una questione di preferenza.
Matt

1
@Matt Giù le mani "libero" non è sempre gratuito. Non discuterò contro questo (il tuo tempo vale soldi). Sono ben consapevole che il costo per la maggior parte delle soluzioni open source è in realtà uno spostamento del modello dei costi dalle licenze d'uso ai servizi di supporto. Non stavo cercando di essere ironico, penso che se Jeffey può offrire la soluzione gratuitamente (o anche a prezzi ragionevoli) questa è la soluzione migliore. Al miglior prezzo elencato da SmartyStreets, 20 milioni di punti costerebbero $ 100.000. Sono sicuro che anche per i casi di uso commerciale possono fare una frazione del costo.
Ragi Yaser Burhum

1
Anche 1000 / req al secondo, che è molto fattibile nelle architetture contemporanee, richiederebbe comunque una straordinaria ingegneria per il geocodifica . Stanno ottenendo i miei oggetti di scena per farlo :)
Ragi Yaser Burhum

8

Ho usato questa procedura dettagliata per descrivere come costruire un geocoder postgis usando i dati TigerLine 2010. Lo sto eseguendo in questo momento - non è veloce, poiché ci vorranno 3 settimane per geocodificare 2 milioni di indirizzi.

Tuttavia, è gratuito, non limitato e ha richiesto a qualcuno con competenze minime di codifica e postgres meno di 2 giorni per impostare e caricare i dati di uno (grande) stato per iniziare la geocodifica. Inoltre, non ho fatto assolutamente alcuna ottimizzazione di postgres per il sistema e funziona su montaggi NFS, quindi sospetto che ci siano uno o due ordini di grandezza di guadagni in termini di prestazioni che potrei ottenere da esso se necessario.

Invece di utilizzare i servizi Web, ho caricato tutti i miei indirizzi nel database Postgres, quindi eseguo uno script perl veloce e sporco per geocodificarli tutti uno alla volta:

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 

(le interruzioni di riga sono solo per leggibilità)

In questo modo viene generata un'istruzione di aggiornamento "geocodifica l'indirizzo con questo valore ID e si utilizza la migliore corrispondenza" e lo si reindirizza a psql per farlo. Tenta solo di geocodificare l'indirizzo senza valutazione, ovvero quelli che non sono già geocodificati. Quindi è riavviabile e ognuno è fatto indipendentemente.


Hai trovato i dati TigerLine 2010 inaccurati per alcuni indirizzi?
Chris Muench,

Non sono dati perfetti in alcun modo; tuttavia, i dati dell'indirizzo che ho sono settici dal punto di vista della qualità. Il geocoder come scritto fornisce un campo di "classificazione", dove inferiore è meglio. Aggiungerò un esempio alla mia risposta.
Adam Musch,

@ChrisMuench: Se mi dai uno o due indirizzi in California, sarei felice di sparargli attraverso il mio geocoder per mostrarti - in questo modo non li selezionerò.
Adam Musch,

Beh, ho provato il geocoder Postgis per un indirizzo a New York, e potrebbero essere fuori da 500 piedi a 1 miglio
Chris Muench

È troppo tardi per te, ma qualcun altro potrebbe trovarlo utile ... Assicurati che il tuo indirizzo venga analizzato bene. Ho scoperto che la mia semplice concatenata "123 Oak St. Anytown ST 12345" è stata accelerata di 550x quando ho aggiunto le virgole: "123 Oak St., Anytown, ST, 12345"
aaryno

3

Immagino che tu voglia geocodificare ma non pagare nulla per questo? Ci sono un sacco di servizi su cui puoi geocodificare 20 milioni di record, ma ti costeranno. Esri, Pitney Bowes e altri offrono questi servizi tramite abbonamento o con un costo per x geocodici. 20 milioni non sono banali, ma suppongo che ci sia un caso aziendale per questo.



3

Questo post è probabilmente troppo tardi per aiutare il poster originale. Tuttavia, per altri utenti che desiderano georeferenziare grandi quantità di dati gratuitamente, è possibile controllare il mio software chiamato "Easy Georeferencer", creato in modo indipendente, facile da usare e tuttavia potente (vedi screenshot in fondo al post).

Il programma è semplice e diretto da usare ed è eseguito direttamente da un file exe che non richiede installazione. Puoi scegliere di geocodificare tra l'origine dati GNS o GeoNames e puoi fare ciò che nessun altro geocoder finora può fare, province di geocodice basate sul database di unità amministrative GADM, nonché confini geografici di paesi storici dal set di dati CShapes. L'unica avvertenza è che non geocodifica i dati degli indirizzi. Tutti gli output vengono forniti come shapefile pronti per la visualizzazione / analisi immediata in un GIS.

Per quanto riguarda l'efficienza e la gestione di dati di grandi dimensioni, il programma è stato testato per geocodificare 100000 record in sole 3 ore. Per set di dati più grandi, l'aumento previsto dei tempi di elaborazione dovrebbe diminuire in modo curvilineo poiché gran parte del tempo di elaborazione passa solo alla fase iniziale quando vengono caricati i set di dati di riferimento del paese, ma riprende successivamente. Inoltre, non è necessario preoccuparsi dei colli di bottiglia di Internet o dei problemi di connettività durante la geocodifica di set di dati di grandi dimensioni poiché il software, i set di dati di riferimento e l'elaborazione sono tutti basati sul computer locale. Le percentuali di corrispondenza possono arrivare fino all'80-90 percento perché si basano sulla contabilità di corrispondenza fuzzy-name per le differenze ortografiche.

Maggiori dettagli, incluso un documento introduttivo e una guida per principianti, sono inclusi nel pacchetto di download. Non c'è bisogno di essere riluttante a provarlo, il programma è solo un semplice file che puoi posizionare ed eseguire sul desktop senza alcun impegno o ingombro del tuo computer.

Il software può essere scaricato da: http://geocodeanything.wordpress.com/

Spero che sia d'aiuto.

inserisci qui la descrizione dell'immagine


Devi sempre rivelare che sono l'autore / sviluppatore e / o il lavoro per l'azienda che produce un prodotto software.
Ryan Dalton,

@RyanDalton Ho rivelato che ero l'autore quando ho scritto "software che ho creato", anche se posso vedere come potrebbe essere passato inosservato perché non è stata data molta enfasi alla frase. Ho modificato la mia formulazione per rendere più chiaro il fatto che sto perdonando il mio software.
Karim Bahgat,

2

Dato che eseguirai il geocoding degli indirizzi statunitensi, penso che lo strumento Indirizzo da strada a coordinate del Data Science Toolkit dovrebbe funzionare bene per te.

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.

Tuttavia, potresti voler scaricare la macchina virtuale ed eseguirla dal tuo hardware. In questo modo, non devi preoccuparti dei limiti API e lo controlli anche tu. Oh, e ho detto che è gratuito? ;-)


È davvero fantastico! Sono sorpreso di non averne mai sentito parlare prima. Inoltre è fantastico poter scaricare la VM e averla già pronta per essere eseguita sul proprio sistema.
Ryan Dalton

È anche open source. :) github.com/petewarden/dstk
RK

2

Non ho visto alcun riferimento al livello di precisione di cui hai bisogno, ma presumo che tu voglia un tetto lungo lat o vicino a quello. Anche la qualità dell'indirizzo di input può essere un fattore. Un elenco di indirizzi ben pulito codificherà meglio e più velocemente di un elenco di indirizzi incompleti o errati. Inoltre, è accettabile una percentuale di successo del 90% o sono necessari tutti i 20 milioni di indirizzi codificati? Non ho una soluzione gratuita, ma ce n'è una relativamente economica che conosco e utilizzo. ZP4 da Semaphore Corp, http://www.semaphorecorp.com/offre uno scrubber / geocoder di indirizzi e componenti aggiuntivi che elaboreranno gli indirizzi e restituiranno un indirizzo pulito, un flag che indica se l'indirizzo è consegnabile USPS e il lat lungo per ZIP + 4. La precisione ZIP + 4 è generalmente vicina alla precisione sul tetto nelle aree costruite (lato corretto della strada e sul blocco corretto) e non nelle aree rurali. Il costo per una licenza di 30 giorni è di $ 120. Dopo quel tempo lo scrubber degli indirizzi continuerà a funzionare, ma la validazione del punto di consegna (DPV) e i resi geografici non funzioneranno. Con un computer relativamente veloce, costruito negli ultimi due anni e tutti i dati archiviati e accessibili localmente, i 20 milioni di record dovrebbero essere eseguiti in circa 10 giorni. Sono stato indirizzi di geocodifica negli ultimi 15 anni e ho usato ZP4 per la maggior parte del tempo. Prima di offrire long-lat o DPV,


2

Sto geocodificando 18 milioni di indirizzi in questo momento, quindi voglio condividere la mia configurazione.

Fondamentalmente ho usato un playbook sensibile per impostare l'istanza Amazon EC2 come server PostGIS Tiger Geocoder, quindi ho usato lo script per raggruppare gli indirizzi geocodici, mapparli sul blocco censimento.

Il costo di Amazon EC2: il requisito minimo 180G SSD costa circa $ 18 al mese. La mia istanza t2.large costa circa $ 90 / mese in totale.

Se hai una Linux box con SSD> 180G, puoi anche usarla sostanzialmente gratis.

La mia prestazione media è di circa 170 ~ 300 ms / indirizzo di buona qualità, 400 ~ 600 ms / indirizzo di cattiva qualità. Per cattiva qualità intendo dire che molti di loro hanno città, codice postale o indirizzo sbagliato o mancanti. Questo tipo di indirizzo impiega molto più tempo a geocodificare, quindi le tue prestazioni dipendono dalla qualità dell'input. L'istanza di Amazon EC2 che ho usato può geocodificare circa 4 milioni di indirizzi formattati davvero male in un mese.

Per maggiori dettagli, vedi il mio post sul blog sull'installazione del sistema e sugli script



1

Se il tuo flusso di lavoro è in Python, la geopy è un'ottima soluzione. Puoi scrivere la tua logica di geocodifica di base in modo astratto, quindi scegliere uno dei tanti provider (ArcGIS, Baidu, Bing, DataBC, GeocodeFarm, GoecoderDotUS, GeoNames, Google, IGN France, LiveAddress, NaviData, Nominatim (OSM), OpenCage, OpenMapQuest, Yahoo! BOSS Place Finder, What3Words, Yandex ... phew). Potresti persino usarli tutti e in definitiva scegliere il punto che ha la massima sicurezza di essere corretto attraverso la validazione da parte di più servizi di geocodifica. Molti di questi servizi richiedono la registrazione (ma non tutti). Potrebbero non essere ugualmente adatti per l'uso negli Stati Uniti, ma il vantaggio di farlo con una funzione Python ordinata è che dovresti essere in grado di controllarlo.

Ecco un breve esempio:

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/

In realtà l'unica parte difficile è assicurarsi che i tuoi indirizzi non siano mal formati. Probabilmente ci vorrà ancora molto tempo per geocodificare 20 milioni di posizioni, tuttavia ... e quel tipo di carico probabilmente violerà i termini di servizio di qualcuno. Spero che questo aiuti qualcuno però.


posso usare un CSV con questo?
Salman,

Certo, se lo leggi con Python.
alphabetasoup,

0

se la tua richiesta di geocodice non supera i 2.500 al giorno, puoi utilizzare l'API di geocodifica di Google . dovresti dare un'occhiata ad api, può tornare ai risultati come json o xml.

Limite di utilizzo:

L'uso dell'API di geocodifica di Google è soggetto a un limite di query di 2.500 richieste di geolocalizzazione al giorno. (L'utente dell'API di Google Maps for Business può eseguire fino a 100.000 richieste al giorno.)

Esempio:

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

Risultato di esempio:

{
  "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 ]
    }
  } ]
}

e puoi controllare alcuni link di esempio per il geocoding da google:

1. Codice unico

2. GeoCoding inverso

3. A partire da Google GeoCoding

spero che ti aiuti


15
Ciò richiederebbe solo circa 22 anni (8000 giorni) per geocodificare 20 milioni di località. Soluzione assolutamente ragionevole.
Andy W

lo so e ho espresso se la sua richiesta di geocodice non supera i 2.500 al giorno, può usarla ... questa è un'opzione se non riesce a trovare alcuna soluzione
Aragon

4
Questo viola i termini di servizio. È ilegal a meno che non visualizzi i risultati su una mappa di Google. Anche se lo fai, trovo l'argomento "cache" che alcune persone usano un po 'allungato per 20 milioni di funzionalità!
Ragi Yaser Burhum
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.