Geocódigo a granel 20 millones de direcciones de EE. UU.

33

¿Existen bases de datos gratuitas o de precios razonables para los EE. UU. en las que se puedan buscar y devolver información de latitud y longitud?

    
pregunta Chris Muench 07.03.2012 - 15:30

12 respuestas

29

Para tantos registros, ni siquiera consideres un servicio web. Te acelerarán o te interrumpirán antes de que puedas terminar tu 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 de TIGER del censo que deberá cargar en una base de datos espacial. Puede encontrar bibliotecas que geocodifican contra TIGER para PostGIS o incluso sqlite . Claro que incluso puedes usar ArcGIS para geocodificar contra TIGER. Por supuesto, ArcGIS no es gratis , 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 TeleAtlas ( me refiero a Tom Tom ) o Navteq conjunto de datos Eso depende de 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 calles una vez que se carguen sus datos 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 estará esperando durante días para que termine, por no 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.

    
respondido por el Ragi Yaser Burhum 07.03.2012 - 17:07
26

Trabajo en SmartyStreets (una empresa de verificación de direcciones). Nuestro servicio es gratuito para todos (hasta el nivel básico). Las startups también pueden solicitar utilizar nuestro servicio completamente gratis durante el primer año. Por lo tanto, si se ajusta a esa clasificación, no hay cargo por nuestro servicio ilimitado por un año.

Ragi recomienda no usar 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 tenga) y de 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, he probado de forma remota nuestro servicio web y obtuve 70,000 búsquedas por segundo con un solo MacBook Pro 2015 en una red inalámbrica. Sí, es bastante rápido. Eso significa que una pequeña lista de 20 millones de direcciones solo tomará unos 5 minutos.

    
respondido por el Jeffrey 07.03.2012 - 18:20
8

Utilicé este tutorial que describe cómo construir un geocodificador Postgis utilizando los datos de TigerLine del 2010 . Lo estoy ejecutando ahora mismo, no es rápido, ya que tomará 3 semanas geocodificar 2 millones de direcciones.

Sin embargo, es gratuito, no regulado, y le tomó a alguien con un mínimo de habilidades de codificación y postgres menos de 2 días para configurar y cargar con los datos de un estado (grande) para comenzar la geocodificación. Tampoco he realizado ningún ajuste posterior al sistema para el sistema y se está ejecutando en montajes NFS, por lo que sospecho que hay uno o dos órdenes de magnitud de ganancias de rendimiento que podría obtener si lo necesitaba.

En lugar de utilizar servicios web, cargué todas mis direcciones en la base de datos de postgres y luego ejecuté un script perl rápido y sucio para geocodificarlos uno por uno:

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 se genere una "geocodificación de la dirección con este valor de ID y use la mejor coincidencia" instrucción de actualización, y la canaliza a psql para hacerlo. Solo intenta geocodificar la dirección sin calificación, es decir, no está geocodificada. Así que es reiniciable, y cada uno se hace de forma independiente.

    
respondido por el Adam Musch 07.03.2012 - 19:25
3

¿Supongo que quieres geocodificar pero no pagar nada por ello? Hay una serie de 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 geocódigos x. 20 millones no es trivial, pero supongo que hay un caso de negocios para esto.

    
respondido por el James Fee 07.03.2012 - 18:45
3

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 de google api, facebook api y ex-simplegeo con mi geodatabase.

enlace

    
respondido por el user3120 17.02.2013 - 01:46
3

Es probable que esta publicación sea demasiado tarde para ayudar al póster original. Sin embargo, para otros que buscan georreferenciar grandes cantidades de datos de forma gratuita, puede consultar mi software llamado "Easy Georeferencer", que se crea de forma independiente, fácil de usar y, sin embargo, potente (consulte la captura de pantalla al final del post).

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 las fronteras de los países desde el conjunto de datos de CShapes. La única advertencia es que no geocodifica datos de direcciones. Todas las salidas vienen como shapefiles listos para visualización / análisis inmediato en un SIG.

En cuanto a la eficiencia y el manejo de grandes datos, el programa se ha 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 reducirse de forma curvilínea, ya que 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 recuperan 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 están basados en la computadora local. Las tasas de coincidencia pueden obtener hasta un 80-90 por ciento porque se basan en una coincidencia de nombres difusos que explica las diferencias ortográficas.

En el paquete de descarga se incluyen más detalles, incluido un documento de presentación y una guía para principiantes. No hay que dudar en probarlo, el programa es solo un archivo simple que puede colocar y ejecutar en su escritorio sin ningún compromiso o desorden de su computadora.

El software se puede descargar desde: enlace

Espero que ayude.

    
respondido por el Karim Bahgat 21.10.2013 - 01:45
2

Como estará geocodificando las direcciones de EE. UU., creo que la herramienta Dirección de calle a coordenadas del Data Science Toolkit debería funciona bien para ti.

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.

Es posible que desee descargar la máquina virtual y ejecutarlo desde su propio hardware. De esa manera, no tiene que preocuparse por los límites de API, sino que también lo controla. Ah, ¿y dije que es gratis? ;-)

    
respondido por el R.K. 08.03.2012 - 14:50
2

No he visto ninguna referencia al nivel de precisión que necesitas, pero supongo que quieres un tiempo de latencia largo en el techo o cerca de eso. La calidad de la dirección de entrada también puede ser un factor. Una lista de direcciones bien limpia se codificará mejor y más rápido que una lista de direcciones incompletas o incorrectas. Además, ¿es aceptable una tasa de aciertos del 90% o necesita codificar todos los 20 millones de direcciones? No tengo una solución gratuita, pero hay una relativamente barata que conozco y uso. ZP4 de Semaphore Corp, enlace ofrece un depurador / geocodificador de direcciones 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 la latitud larga para el ZIP + 4. La precisión de ZIP + 4 generalmente está cerca de la precisión del techo en áreas edificadas (lado correcto de la calle y en el bloque correcto) y no cerca de á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 del Punto de Entrega (DPV) y los retornos geográficos 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 deben 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, lo usé para limpiar previamente las direcciones antes de la geocodificación.

    
respondido por el ktreiche 12.03.2012 - 23:07
2

Ahora estoy geocodificando 18 millones de direcciones, así que quiero compartir mi configuración.

Básicamente, utilicé un libro de juego ansible para configurar la instancia de Amazon EC2 como un servidor Geocoder de PostGIS Tiger, luego uso el script para agrupar las direcciones de geocodificación, asignarlas al bloque de censo.

El costo de Amazon EC2: el requisito mínimo de 180G SSD cuesta alrededor de $ 18 por mes. Mi t2.large instancia cuesta alrededor de $ 90 / mes en total.

Si tiene una caja de Linux con SSD > 180G, también puedes usarlo 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 faltante o incorrecta, un código postal, 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 cerca de 4 millones de direcciones formateadas realmente mal en un mes.

Para obtener más información, consulte la publicación de mi blog sobre la configuración del sistema y scripts

    
respondido por el dracodoc 27.11.2015 - 21:46
1

AWS tiene varios servidores de geocodificación disponibles ahora. Obtenga su propio servidor y volcar sus datos allí. enlace

enlace

enlace

    
respondido por el Ervin Ruci 03.04.2016 - 07:02
1

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 manera 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! Buscador de lugares de BOSS, What3Words, Yandex ... phew). Incluso podría usarlos todos y, finalmente, elegir el punto que tenga la mayor confianza de ser correcto a través de la validación mediante 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 la ventaja de hacerlo con una función de Python es que debería poder controlarlos.

Aquí hay un breve 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

enlace

Realmente la única parte difícil es garantizar que sus direcciones no estén mal formadas. Sin embargo, es probable que todavía lleve mucho tiempo geocodificar 20 millones de ubicaciones ... y ese tipo de carga probablemente violará los términos de servicio de alguien. Espero que esto ayude a alguien sin embargo.

    
respondido por el Richard Law 04.08.2015 - 21:48
0

si su solicitud de codificación geográfica no excede los 2,500 por día, puede usar The Google API de geocodificación . debería echar un vistazo a la API, puede volver a los resultados como json o xml.

Límite de uso:

  

El uso de Google Geocoding API está sujeto a un límite de consulta de 2,500   Solicitudes de geolocalización por día. (Usuario de la API de Google Maps para empresas   puede realizar hasta 100,000 solicitudes por día.)

Ejemplo:

enlace

Ejemplo de resultado:

{
  "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 puede consultar algún enlace de ejemplo para geocodificación de google:

1. Código Único

2. Codificación geográfica inversa

3. Comenzando con Google GeoCoding

espero que te ayude

    
respondido por el Aragon 07.03.2012 - 15:53

Lea otras preguntas en las etiquetas