¿Geocodificación de direcciones de EE. UU. Que no se pueden enviar a través de Internet?

46

Para un proyecto único, necesito geocodificar algunos miles de direcciones. En el pasado, he usado varios recursos en línea para este tipo de cosas (por ejemplo, API de Google Maps), pero las direcciones con las que estoy trabajando deben mantenerse confidenciales, lo que significa que no se debe enviar por Internet, a menos que haya algo de hierro -reclaro de garantía de privacidad. ¿Qué otras opciones tengo?

Matt Parker
fuente
44
¿Hay una localidad específica en la que le gustaría geocodificar? Por ejemplo, Australia, EE. UU., Un estado específico, etc.
fmark
Buena pregunta: estoy interesado en los Estados Unidos en general, Colorado en particular, los condados de Front Range precisamente.
Matt Parker el
1
Realmente abriría una discusión rápida con RTD, sé que en esa área tienen un SIG poderoso y probablemente podrían brindarle apoyo directo. De otra manera; Geocoder :: US es una gran opción. Puede ejecutarlo internamente y no tener que arriesgar sus datos a través del cable.
DEWright
@DEWright, esa es una idea interesante, aún más para otra pregunta mía . ¡Gracias!
Matt Parker el

Respuestas:

10

Si prefieres utilizar la API de Geocodificación de Google u otra fuente en línea en lugar de las opciones locales, te sugiero que busques en el Proyecto Tor (que se instala fácilmente a través del paquete denominado "Paquete Vidalia").

Tor lo protege al hacer rebotar sus comunicaciones en una red distribuida de retransmisores gestionados por voluntarios de todo el mundo: evita que ... los sitios que visita conozcan su ubicación física.

Junto con la inyección de direcciones aleatorias y el uso de SSL (https) para cifrar las comunicaciones a sus puntos finales (asegúrese de que también lo esté haciendo), no puedo pensar en una forma más segura de geocodificar de forma remota. Cualquier servicio de geocodificación que esté utilizando nunca podrá identificar de dónde provienen las solicitudes, y con https, nadie más lo hará. Nota: no use un servicio de geocodificación que requiera una clave de API para esto, o ya no será anónimo. (Google ya no requiere una clave de API).

Un "beneficio" secundario de este procedimiento es que ya no estará restringido a ninguna cantidad de solicitudes de geocodificación, ya que sus solicitudes parecerán que provienen de múltiples direcciones IP. Sin embargo, no recomiendo ni apruebo el abuso de estas encantadoras API gratuitas. La velocidad seguirá siendo limitada si la API limita la velocidad (aunque la velocidad de transmisión con Tor es bastante más lenta que la conexión directa).

Estudio de caso en Python: una vez que haya instalado el paquete Vidalia Bundle y tenga el proxy ejecutándose en 127.0.0.1:8118 (predeterminado), en Python 2.7 o superior puede configurar un proxy https urllib2 usando:

import urllib2
proxy = urllib2.ProxyHandler({'https': '127.0.0.1:8118'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen("https://maps.google.com/maps/geo?q=Los+Angeles&sensor=false&gl=us")

Tenga en cuenta que los servidores proxy urllib2 no funcionan con https hasta al menos Python 2.7 más o menos, por lo que este método solo funciona con versiones recientes de Python. Asegúrese de tener 'https' (no 'http') en ambos lugares en el ejemplo anterior. Solo lo probé con Python 2.7.1.

Vidalia cambia su identidad / origen aparente de dirección IP cada 10 minutos, pero si se encuentra con tasas lentas u otros problemas (errores de cuota excedida), o si es especialmente paranoico y desea cambiar su identidad con más frecuencia, puede cambiar su identidad Tor usando el código de Python aquí (ligeramente modificado a continuación). Tendrá que cambiar la contraseña de Tor a una estática (en lugar de una generada aleatoriamente) ingresando la configuración de Vidalia. También podría necesitar reiniciar Vidalia después de todos los cambios.

p = "MySuperSecurePassword"
def renewTorIdentity():
    success = False
    try:
        s = socket.socket()
        s.connect(('localhost', 9051))
        s.send('AUTHENTICATE "' + p + '"\r\n')
        resp = s.recv(1024)
        if resp.startswith('250'):
            s.send("signal NEWNYM\r\n")
            resp2 = s.recv(1024)
            if resp2.startswith('250'):
                success = True
    except:
        success = False
    return success
Victor Van Hee
fuente
44
Eso no mantiene las direcciones confidenciales, ¿verdad? La ubicación física de la máquina que envía la consulta es irrelevante (no confidencial) aquí.
oscuro
44
Para la mayoría de los propósitos, la ubicación física de la máquina que envía la consulta es muy importante para proteger el anonimato de los datos que se envían a un servicio de geocodificación. Digamos que una computadora en el Instituto para el Estudio de X envía una solicitud de geocodificación para 1000 direcciones. Uno podría (al menos en teoría) identificar esas direcciones como que contienen individuos con enfermedad X. Por el contrario, las direcciones mezcladas con miles de solicitudes aleatorias de muchos usuarios y que provienen de múltiples direcciones IP que no corresponden a ningún usuario (la situación de Tor) no son identificables con respecto al propósito.
Victor Van Hee
Enviar datos a Google (a través de Tor o cualquier cosa) es un problema fundamental de privacidad. Google no ofrece la "garantía de privacidad revestida de hierro".
Nicolas Raoul
7

Una opción es usar Geo-Coder-US , que es un módulo Perl de código abierto que usa los datos de Tigre / Línea del Censo de EE. UU. Para geocodificar. No lo he usado personalmente, pero se ve excelente. El enlace de arriba incluye una buena descripción y un enlace a una versión que ya tiene los archivos necesarios del Censo reunidos.

Matt Parker
fuente
6

La biblioteca Geokit puede usar cualquiera de Google, Yahoo, Geocoder.us, Geocoder.ca y Geonames. Está escrito en Ruby, y también hay una biblioteca hermana para sus proyectos de Ruby on Rails:

http://geokit.rubyforge.org/

Para conservar la privacidad, puede difundir consultas a todos los proveedores separándolos en conjuntos que tienen menos probabilidades de estar vinculados a sus actividades. También puede inyectar ruido en sus direcciones agregando direcciones reales de un directorio telefónico en línea. Y le sugiero que ejecute este script desde varios lugares, como cibercafés, combinando los resultados al final.

La única forma de preservar verdaderamente su privacidad es descargar el conjunto completo de datos y ejecutar su script contra él. Existe el sistema Nominatim de OpenStreetMap. No está completo para todas las ciudades, pero podría usarlo para reducir la lista de direcciones enviadas a otros proveedores.

Nicolas Marchildon
fuente
5

Aunque todavía se encuentra en las primeras etapas de desarrollo, http://openaddresses.org/ tiene como objetivo proporcionar una base de datos abierta de direcciones mundiales y servicios de geocodificación asociados.

Si bien no es privado, la naturaleza de una base de datos de direcciones abiertas podría significar que está disponible para descargar en su totalidad (o al menos para regiones seleccionadas) para permitir la geocodificación fuera de línea.

geographika
fuente
3

Pensé que el código detrás de http://geocoder.us/ estaba disponible para descargar de tal manera que pudiera obtenerlo y un archivo de datos TIGER y más o menos configurar su propia instalación local. No veo eso inmediatamente después de volver a visitar ese sitio, pero es posible que desee mirar un poco.

Joe Germuska
fuente
3

¿Por qué no usar los mismos geocodificadores que usó antes, solo elimine todos los demás metadatos?

¿No envíe "Ubicación secreta; 123 Main Street, Some City", simplemente envíe "123 Main Street, Some City"? Las direcciones son información pública de todos modos. Simplemente no le digas al geocodificador que tienes una lista de bases nucleares o todas las ubicaciones de la NSA. Los resultados estarán en formato de tabla, luego puede volver a adjuntar todos sus otros metadatos secretos.

Vadim
fuente
1
Así es como me siento acerca de la situación. No es así como se siente mi empleador sobre la situación. Para obtener el beneficio de la duda, si obtiene una lista de direcciones de una dirección IP reconocible, no es tan difícil imaginar que alguien podría descubrir a qué se refieren las direcciones.
Matt Parker
1
@Matt Eso es algo para lo que los consultores son buenos :-). Otra opción es mezclar direcciones misceláneas con las que envía. Claro, aumenta los costos, pero de todos modos son muy bajos ...
whuber
3

La búsqueda en la página de inicio de OpenStreetMap es un sistema llamado Nominatim . Puede llamarlo como un servicio de geocodificación (si es amable), pero todo es de código abierto, por lo que también puede configurarlo en su propio servidor.

Esto está utilizando los datos de OpenStreetMap cargados en la base de datos postGiS. Es relativamente nuevo y aún está en desarrollo, y el proceso de configuración y carga de datos no es tan sencillo y requiere bastante recursos. ... pero es gratis y abierto!

Harry Wood
fuente
3

La mayoría de las respuestas lo guían hacia una base de datos local. Si bien eso ciertamente funcionaría, también debe considerar si la codificación geográfica es su dominio principal. (¿Es eso en lo que eres bueno? Si es así, probablemente ya tienes los datos que recomiendan. Si no, Y QUIERES QUE SEA, entonces debes descargar los datos y hacerlo localmente. Sin embargo, si solo necesitas Para resolver un problema y no querer dedicar innumerables horas a la producción, todavía hay opciones para hacerlo a través de una API sin comprometer la seguridad.

Primero, insista en HTTPS porque necesita que los datos estén seguros en el camino a la API y luego en el camino de regreso a usted. En segundo lugar, asegúrese de hacer una solicitud POST en lugar de una solicitud GET a la API. Con POST, solo está pasando una solicitud de URL con una carga útil y el único resultado que afectaría el registro del servidor es el hecho de que se realizó una solicitud de verificación de geocodificación y dirección en un momento determinado y desde una determinada IP. Ni la dirección enviada ni la dirección devuelta se almacenarán en el disco ni se escribirán en un registro del servidor. No se vuelve mucho más seguro que eso.

Entonces, si bien una caja local definitivamente sería segura, podría requerir mucho desarrollo para hacer lo que necesita. Dado que las preocupaciones de seguridad pueden ser pacificadas, es posible que desee considerar (nuevamente) la opción de usar una API.

Trabajo para una compañía de verificación de direcciones que se especializa en geocodificación API segura: SmartyStreets .

Jeffrey
fuente
1

Hilo antiguo pero vale la pena mencionarlo. http://www.tigergeocoder.com/ utilizando datos de TIGER 2013, listos para ejecutar su propia instancia de servidor en la nube de Amazon EC2.

Biba
fuente
1

Configure PostGIS Tiger Geocoder en su caja de Linux local. Definitivamente es más engorroso que la API en línea, pero quizás sea la mejor apuesta para su situación. Y puede escalar a millones de direcciones si es necesario.

Con la ayuda de Ansible Playbook, configurar el servidor en Linux es mucho más fácil que antes. La redacción de consultas SQL probablemente llevará más tiempo si no está familiarizado con SQL o PostGIS.

Puede consultar la configuración de mi sistema y mi script para obtener más detalles. Debe incluir toda la información que necesita.

dracodoc
fuente