¿Existen bases de datos gratuitas o con precios razonables para los EE. UU. Que puedan buscarse y devolver información de latitud y longitud?
¿Existen bases de datos gratuitas o con precios razonables para los EE. UU. Que puedan buscarse y devolver información de latitud y longitud?
Respuestas:
Para tantos registros, ni siquiera considere un servicio web. Lo estrangularán o lo interrumpirán antes de que pueda terminar su tarea.
Entonces, su opción se convierte en ejecutarlo localmente, y para eso tiene varias opciones comerciales o gratuitas.
Las opciones gratuitas utilizarán el conjunto de datos del censo TIGER que deberá cargar en una base de datos espacial. Puede encontrar bibliotecas que geocodifiquen contra TIGER para PostGIS o incluso sqlite . Diablos, incluso puedes usar ArcGIS para geocodificar contra TIGRE. Por supuesto, ArcGIS no es gratuito, lo que me lleva a las siguientes opciones comerciales. Si tiene una licencia de ArcGIS, es probable que tenga un DVD de StreetMap con un conjunto de datos TeleAtlas ( me refiero a Tom Tom ) o Navteq. Eso depende si tienes StreetMap Premium incluido. Cualquiera de esos dos conjuntos de datos probablemente le dará resultados más consistentes que TIGER.
Hágase un favor y haga varias copias de la base de datos de la calle una vez que sus datos estén cargados y ejecute el proceso de geocodificación en varias máquinas con un subconjunto de los datos de entrada. No intente ejecutarlo en una sola máquina o esperará días a que termine, sin mencionar que lo más probable es que cualquier proceso que ejecute probablemente pierda memoria y se bloquee varias veces antes de que finalice. Esto significa que desea tener diferentes puntos de control para su proceso.
Trabajo en SmartyStreets (una compañía de verificación de direcciones). Nuestro servicio es gratuito para todos (hasta el nivel básico). Las startups también pueden solicitar el uso de nuestro servicio completamente gratis durante el primer año. Entonces, si cumple con esa clasificación, no hay cargo por nuestro servicio ilimitado por un año.
Ragi recomienda contra un servicio web, sin embargo, nuestra API puede limpiar, estandarizar y geocodificar fácilmente 20 millones de direcciones en aproximadamente 5 horas (aproximadamente 1000 por segundo). Parte de ese tiempo dependerá de la velocidad de su máquina (cuántos núcleos tiene) y su conexión de red (no lo intente a través de 3G, pero una conexión de banda ancha estándar funcionará bien).
Solo quería señalar que ciertamente es posible con un servicio web.
Actualización: A partir del 1 de agosto de 2017, probé de forma remota nuestro servicio web y obtuve 70,000 búsquedas por segundo sostenidas utilizando solo un MacBook pro 2015 en una red inalámbrica. Sí, es bastante rápido. Eso significa que una lista pequeña como 20 millones de direcciones solo tomaría unos 5 minutos.
Utilicé este tutorial que describe cómo construir un geocodificador postgis utilizando los datos de TigerLine 2010. Lo estoy ejecutando en este momento, no es rápido, ya que tomará 3 semanas geocodificar 2 millones de direcciones.
Sin embargo, es gratis, sin estrangulamiento, y a alguien con habilidades mínimas de codificación y postgres en menos de 2 días para configurar y cargar con los datos de un estado (grande) para comenzar a geocodificar. Tampoco he realizado ningún ajuste de postgres para el sistema y se está ejecutando sobre monturas NFS, por lo que sospecho que hay un aumento de rendimiento de uno o dos órdenes de magnitud que podría obtener si lo necesitara.
En lugar de usar servicios web, cargué todas mis direcciones en la base de datos de postgres, y luego ejecuto un script perl rápido y sucio para geocodificarlos uno a la vez:
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
(saltos de línea únicamente para facilitar la lectura)
De modo que genera una instrucción de actualización "geocodificar la dirección con este valor de ID y usar la mejor coincidencia", y la canaliza a psql para hacerlo. Solo intenta geocodificar la dirección sin calificación, es decir, las que aún no están geocodificadas. Por lo tanto, es reiniciable, y cada uno se realiza de forma independiente.
¿Supongo que quieres geocodificar pero no pagar nada por ello? Hay muchos servicios en los que puede geocodificar 20 millones de registros, pero le costará. Esri, Pitney Bowes y otros ofrecen estos servicios mediante suscripción o con un costo por x códigos geográficos. 20 millones no es trivial, pero supongo que hay un caso de negocios para esto.
La ubicación de sus datos es muy importante porque la calidad de los servicios web cambia (precisión, escala, etc.) geocodifico mi dirección desde google api, facebook api y ex-simplegeo con mi geodatabase.
http://blog.programmableweb.com/2012/06/21/7-free-geocoding-apis-google-bing-yahoo-and-mapquest/
Esta publicación probablemente sea demasiado tarde para ayudar al póster original. Sin embargo, para otros que buscan georreferenciar grandes cantidades de datos de forma gratuita, pueden consultar mi software llamado "Easy Georeferencer", que se crea de forma independiente, fácil de usar y potente (vea la captura de pantalla al final de la publicación).
El programa es simple y directo de usar, y se ejecuta directamente desde un archivo exe que no requiere instalación. Puede elegir geocodificar entre la fuente de datos GNS o GeoNames, y puede hacer lo que ningún otro geocodificador puede hacer hasta ahora, geocodificar provincias basadas en la base de datos de unidades administrativas de GADM, así como geocodificar fronteras históricas de países desde el conjunto de datos CShapes. La única advertencia es que no geocodifica datos de dirección. Todas las salidas vienen en forma de archivos listos para visualización / análisis inmediato en un SIG.
En cuanto a la eficiencia y el manejo de grandes datos, el programa ha sido probado para geocodificar 100,000 registros en solo 3 horas. Para conjuntos de datos más grandes, el aumento esperado en el tiempo de procesamiento debería caer curvilíneamente porque gran parte del tiempo de procesamiento va solo a la fase inicial cuando se cargan los conjuntos de datos de referencia del país, pero se recupera después. Además, uno no tiene que preocuparse por los cuellos de botella de Internet o los problemas de conectividad al geocodificar grandes conjuntos de datos porque el software, los conjuntos de datos de referencia y el procesamiento se basan en la computadora local. Las tasas de coincidencia pueden llegar hasta 80-90 por ciento porque se basa en la contabilidad de coincidencia de nombres difusos para las diferencias ortográficas.
En el paquete de descarga se incluyen más detalles, incluido un documento introductorio y una guía para principiantes. No necesita dudar en probarlo, el programa es solo un archivo simple que puede colocar y ejecutar en su escritorio sin ningún compromiso o desorden en su computadora.
El software se puede descargar desde: http://geocodeanything.wordpress.com/
Espero que ayude.
Como va a geocodificar direcciones de EE. UU., Creo que la herramienta Dirección de calle para coordenadas del Data Science Toolkit debería funcionar bien para usted.
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.
Sin embargo, es posible que desee descargar la máquina virtual y ejecutarla desde su propio hardware. De esa manera, no tiene que preocuparse por los límites de la API y también lo controla. Ah, ¿y dije que es gratis? ;-)
No he visto ninguna referencia al nivel de precisión que necesita, pero supongo que desea un techo largo o cercano a eso. La calidad de la dirección de entrada también puede ser un factor. Una lista de direcciones bien limpiada codificará mejor y más rápido que una lista de direcciones incompletas o incorrectas. Además, ¿es aceptable una tasa de éxito del 90% o necesita los 20 millones de direcciones codificadas? No tengo una solución gratuita, pero hay una relativamente económica que conozco y utilizo. ZP4 de Semaphore Corp, http://www.semaphorecorp.com/ofrece un depurador de direcciones / geocodificador y complementos que procesarán las direcciones y devolverán una dirección limpia, una bandera que indica si la dirección es entregable por USPS y el lat largo para el ZIP + 4. La precisión ZIP + 4 generalmente está cerca de la precisión de la azotea en áreas urbanizadas (lado correcto de la calle y en el bloque correcto) y no está cerca en áreas rurales. El costo de una licencia de 30 días es de $ 120. Después de ese tiempo, el depurador de direcciones seguirá funcionando, pero la Validación de punto de entrega (DPV) y las devoluciones geográficas no funcionarán. Con una computadora relativamente rápida, construida en los últimos dos años, y todos los datos almacenados y accedidos localmente, los 20 millones de registros deberían realizarse en aproximadamente 10 días. He estado geocodificando direcciones durante los últimos 15 años y he estado usando ZP4 durante la mayor parte de ese tiempo. Antes de que ofrecieran long-lat o DPV,
Ahora estoy geocodificando 18 millones de direcciones, así que quiero compartir mi configuración.
Básicamente, utilicé un libro de jugadas ansible para configurar la instancia de Amazon EC2 como un servidor PostGIS Tiger Geocoder, luego utilicé el script para agrupar las direcciones de geocodificación, asignarlas al bloque del censo.
El costo de Amazon EC2: el requisito mínimo de 180G SSD cuesta alrededor de $ 18 / mes. Mi instancia t2.large cuesta alrededor de $ 90 / mes en total.
Si tiene una caja de Linux con SSD> 180G, también puede usarla básicamente gratis.
Mi rendimiento promedio es de aproximadamente 170 ~ 300 ms / dirección de buena calidad, 400 ~ 600 ms / dirección de mala calidad. Por mala calidad me refiero a que muchos de ellos tienen una ciudad o código postal faltante o incorrecto, o incluso una dirección incorrecta. Este tipo de dirección tarda mucho más tiempo en geocodificar, por lo que su rendimiento depende de la calidad de la entrada. La instancia de Amazon EC2 que utilicé puede geocodificar alrededor de 4 millones de direcciones formateadas realmente malas en un mes.
Para obtener más detalles, consulte la publicación de mi blog sobre la configuración del sistema y las secuencias de comandos
AWS tiene varios servidores de geocodificación disponibles ahora. Obtenga su propio servidor y descargue sus datos allí. https://aws.amazon.com/marketplace/search/results/ref=dtl_navgno_search_box?page=1&searchTerms=geocode
Si su flujo de trabajo está en Python, geopy es una gran solución. Puede escribir su lógica de geocodificación básica de forma abstracta y luego elegir entre uno de los muchos proveedores (ArcGIS, Baidu, Bing, DataBC, GeocodeFarm, GoecoderDotUS, GeoNames, Google, IGN France, LiveAddress, NaviData, Nominatim (OSM), OpenCage, OpenMapQuest, Yahoo! BOSS Place Finder, What3Words, Yandex ... phew). Incluso podría usarlos todos y, en última instancia, elegir el punto que tenga la mayor confianza de ser correcto a través de la validación por múltiples servicios de geocodificación. Muchos de estos servicios requieren registro (pero no todos). Puede que no sean igualmente adecuados para su uso en los EE. UU., Pero el beneficio de hacerlo con una función de Python ordenada es que debería poder controlar eso.
Aquí hay un pequeño ejemplo:
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/
Realmente, la única parte difícil es asegurarse de que sus direcciones no estén mal formadas. Sin embargo, probablemente aún llevará un tiempo considerable geocodificar 20 millones de ubicaciones ... y ese tipo de carga probablemente violará los términos de servicio de alguien. Aunque espero que esto ayude a alguien.
Si su solicitud de geocodificación no supera los 2.500 por día, puede utilizar la API de geocodificación de Google . deberías echar un vistazo a api, puede volver a resultados como json o xml.
Límite de uso:
El uso de la API de geocodificación de Google está sujeto a un límite de consulta de 2.500 solicitudes de geolocalización por día. (El usuario de la API de Google Maps para empresas puede realizar hasta 100,000 solicitudes por día).
Ejemplo:
http://maps.google.com/maps/geo?key=yourkeyhere&output=json&q=520+3rd+Street+San+Francisco+CA
Resultado de ejemplo:
{
"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 ]
}
} ]
}
y puedes consultar algún enlace de ejemplo para geocodificar desde google:
3. Comenzando con Google GeoCoding
espero que te ayude