Esistono database gratuiti oa prezzi ragionevoli per gli Stati Uniti che possono essere cercati e restituire informazioni su latitudine e longitudine?
Esistono database gratuiti oa prezzi ragionevoli per gli Stati Uniti che possono essere cercati e restituire informazioni su latitudine e longitudine?
Risposte:
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.
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.
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.
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.
La posizione dei tuoi dati è molto importante perché la qualità dei servizi web cambia (precisione, scala, ecc ...) Geocodifica il mio indirizzo da google api, facebook api ed ex-simplegeo con il mio geodatabase.
http://blog.programmableweb.com/2012/06/21/7-free-geocoding-apis-google-bing-yahoo-and-mapquest/
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.
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? ;-)
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,
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
AWS ha ora un numero di server di geocodifica disponibili. Ottieni il tuo server e scarica i tuoi dati lì. https://aws.amazon.com/marketplace/search/results/ref=dtl_navgno_search_box?page=1&searchTerms=geocode
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ò.
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:
3. A partire da Google GeoCoding
spero che ti aiuti