Geocodificação de endereços nos EUA que não podem ser enviados pela Internet?

46

Para um projeto único, preciso geocodificar alguns milhares de endereços. No passado, usei vários recursos on-line para esse tipo de coisa (por exemplo, API do Google Maps), mas os endereços com os quais estou trabalhando precisam ser mantidos em sigilo - o que significa que não é necessário enviá-lo pela Internet, a menos que haja algum ferro de passar. garantia de privacidade. Que outras opções eu tenho?

Matt Parker
fonte
4
Existe uma localidade específica na qual você deseja geocodificar? Por exemplo, Austrália, EUA, um estado específico etc.
fmark 29/08/10
Boa pergunta - Estou interessado nos EUA em geral, principalmente no Colorado, nos condados da Front Range precisamente.
Matt Parker
1
Eu realmente abriria uma discussão rápida com a IDT, sei que nessa área eles têm um SIG poderoso e provavelmente poderiam lhe dar suporte direto. De outra forma; o Geocoder :: US é uma ótima opção. Você pode executá-lo internamente e não precisa arriscar que seus dados sejam transmitidos.
DEWright
@ DEWright, essa é uma ideia interessante - ainda mais para outra questão minha . Obrigado!
Matt Parker

Respostas:

10

Se você prefere usar a API de geocodificação do Google ou outra fonte on-line, em vez de opções locais, sugiro pesquisar no Projeto Tor (facilmente instalado através do pacote chamado 'Vidalia Bundle').

O Tor protege você devolvendo suas comunicações em uma rede distribuída de relés executados por voluntários em todo o mundo: impede ... os sites que você visita de aprender sua localização física.

Juntamente com a injeção de endereços aleatórios e o uso de SSL (https) para criptografar as comunicações em seus pontos de extremidade (verifique se você também está fazendo isso), não consigo pensar em uma maneira mais segura de geocodificar remotamente. Qualquer que seja o serviço de geocodificação que você estiver usando, nunca será capaz de identificar de onde vieram as solicitações e, com o https, ninguém mais o fará. Nota: não use um serviço de geocodificação que exija uma chave API para isso, ou você não será mais anônimo. (O Google não exige mais uma chave API).

Um "benefício" secundário desse procedimento é que você não ficará mais restrito a nenhum número de solicitações de geocodificação, pois elas parecerão provenientes de vários endereços IP. No entanto, eu não recomendo ou apoio o abuso dessas adoráveis ​​APIs gratuitas! A taxa ainda será limitada se a API limitar a taxa (embora a velocidade de transmissão usando o Tor seja um pouco mais lenta que a conexão direta).

Estudo de caso em Python - Depois de instalar o Vidalia Bundle e executar o proxy em 127.0.0.1:8118 (o padrão), no Python 2.7 ou superior, você pode configurar um 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")

Observe que os proxies urllib2 não funcionam com https até pelo menos o Python 2.7, portanto esse método funciona apenas com versões recentes do Python. Verifique se você tem 'https' (não 'http') nos dois lugares no exemplo acima. Eu só testei com o Python 2.7.1.

O Vidalia altera sua identidade / origem aparente do endereço IP a cada 10 minutos, mas se você tiver taxas lentas ou outros problemas (erros de cota excedidos) ou se for especialmente paranóico e quiser mudar sua identidade com mais frequência, poderá alterar sua identidade Tor usando o código python aqui (ligeiramente modificado abaixo). Você precisará alterar a senha do Tor para estática (em vez de gerada aleatoriamente), digitando as configurações do Vidalia. Também pode ser necessário reiniciar o Vidalia após todas as alterações.

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
fonte
4
Isso não mantém os endereços confidenciais, mantém? A localização física da máquina que envia a consulta é irrelevante (não confidencial) aqui.
Underdark
4
Para a maioria dos propósitos, a localização física da máquina que envia a consulta é muito importante para proteger o anonimato dos dados que estão sendo enviados para um serviço de geocodificação. Digamos que um computador no Instituto para o Estudo do X envie uma solicitação de geocodificação para 1000 endereços. Pode-se (pelo menos teoricamente) identificar esses endereços como contendo indivíduos com doença X. Por outro lado, endereços misturados a milhares de solicitações aleatórias de muitos usuários e provenientes de vários endereços IP que não correspondem a nenhum usuário (a situação Tor) não são identificáveis ​​com relação ao objetivo.
Victor Van Hee
Enviar dados para o Google (via Tor ou qualquer outra coisa) é um problema fundamental de privacidade. O Google não oferece a "garantia de privacidade revestida a ferro".
Nicolas Raoul
7

Uma opção é usar o Geo-Coder-US , que é um módulo Perl de código aberto que usa os dados Tiger / Line do Censo dos EUA para geocodificar. Eu não o usei pessoalmente, mas parece excelente. O link acima inclui uma boa visão geral e um link para uma versão que já possui os arquivos de Censo necessários reunidos.

Matt Parker
fonte
6

A biblioteca Geokit pode usar qualquer um dos nomes de Google, Yahoo, Geocoder.us, Geocoder.ca e Geonames. Está escrito em Ruby, e também há uma biblioteca irmã para seus projetos Ruby on Rails:

http://geokit.rubyforge.org/

Para conservar a privacidade, você pode espalhar consultas para todos os fornecedores, separando-os em conjuntos com menor probabilidade de vincular-se às suas atividades. Você também pode injetar ruído em seus endereços adicionando endereços reais de uma lista telefônica online. E sugiro que você execute esse script de vários lugares, como cibercafés, combinando os resultados no final.

A única maneira de preservar verdadeiramente sua privacidade é baixar o conjunto completo de dados e executar seu script. Existe o sistema Nominatim do OpenStreetMap. Não está completo para todas as cidades, mas você pode usá-lo para reduzir a lista de endereços enviados a outros provedores.

Nicolas Marchildon
fonte
5

Embora ainda esteja nos estágios iniciais de desenvolvimento, o http://openaddresses.org/ visa fornecer um banco de dados aberto de endereços em todo o mundo e serviços de geocodificação associados.

Embora não seja privado, a natureza de um banco de dados de endereço aberto pode significar que ele está disponível para download em sua totalidade (ou pelo menos para regiões selecionadas) para permitir geocodificação offline.

geographika
fonte
3

Eu pensei que o código por trás do http://geocoder.us/ estivesse disponível para download, para que você pudesse obtê-lo e um arquivo de dados TIGER e, mais ou menos, configurar sua própria instalação local. Não vejo isso imediatamente ao revisitar o site, mas você pode dar uma olhada um pouco.

Joe Germuska
fonte
3

Por que não usar os mesmos geocodificadores que você usou antes, basta remover todos os outros metadados?

Não envie "Localização Secreta; 123 Main Street, Some City", apenas envie "123 Main Street, Some City"? Os endereços são informações públicas de qualquer maneira. Apenas não diga ao geocoder que você tem uma lista de bases nucleares ou todos os locais da NSA. Os resultados estarão no formato de tabela, e você poderá anexar novamente todos os outros metadados secretos.

Vadim
fonte
1
É assim que me sinto sobre a situação. Não é assim que meu empregador se sente sobre a situação. Para tirar o benefício da dúvida, se você obtiver uma lista de endereços de um endereço IP reconhecível, não é tão difícil imaginar que alguém possa descobrir a que os endereços se relacionam.
Matt Parker
1
@ Matt Isso é uma coisa que consultores são bons para :-). Outra opção é misturar endereços diversos com os que você envia. Claro, isso aumenta os custos, mas eles são tão baixos de qualquer maneira ...
whuber
3

A pesquisa na página inicial do OpenStreetMap é um sistema chamado Nominatim . Você pode chamá-lo como um serviço de geocodificação (se você for gentil), mas é tudo de código aberto, para que você possa configurá-lo também em seu próprio servidor.

Isso está usando os dados do OpenStreetMap carregados no banco de dados postGiS. É relativamente novo e ainda está em desenvolvimento, e o processo de configuração e carregamento de dados não é tão simples e requer muita recursos. ... mas é grátis e aberto!

Harry Wood
fonte
3

A maioria das respostas está direcionando você para um banco de dados local. Embora isso certamente funcione, você também deve considerar se a gecoding é o seu domínio principal. (É nisso que você é bom? Em caso afirmativo, você provavelmente já possui os dados que eles recomendam. Caso contrário, E VOCÊ DESEJA, deve fazer o download dos dados e apenas localmente. No entanto, se você precisar Para resolver um problema e não desejar dedicar inúmeras horas à produção, ainda há opções para fazê-lo por meio de uma API sem comprometer a segurança.

Primeiro, insista no HTTPS porque você precisa que os dados estejam seguros no caminho para a API e depois no caminho de volta para você. Segundo, verifique se você está fazendo uma solicitação POST em vez de uma solicitação GET para a API. Usando o POST, você está apenas passando uma solicitação de URL com uma carga útil e os únicos resultados que atingiriam o log do servidor são o fato de uma solicitação de verificação de endereço e geocodificação ter sido feita em um determinado momento e a partir de um determinado IP. Nem o endereço enviado nem o endereço retornado seriam armazenados em disco ou gravados em um log do servidor. Não é muito mais seguro do que isso.

Portanto, embora uma caixa local seja definitivamente segura, pode ser necessário muito desenvolvimento para fazer o que você precisa. Como as preocupações com segurança podem ser pacificadas, convém considerar (novamente) a opção de usar uma API.

Eu trabalho para uma empresa de verificação de endereços especializada em geocodificação segura de API - SmartyStreets .

Jeffrey
fonte
1

Tópico antigo, mas vale a pena mencionar. http://www.tigergeocoder.com/ usando dados do TIGER 2013, prontos para executar sua própria instância de servidor na nuvem Amazon EC2.

Biba
fonte
1

Configure o Geocoder PostGIS Tiger na sua caixa linux local. É definitivamente mais complicado que a API on-line, mas talvez seja a melhor aposta para sua situação. E pode escalar para milhões de endereços, se necessário.

Com a ajuda do ansible playbook, configurar o servidor no linux é muito mais fácil do que antes. Escrever consultas SQL provavelmente levará mais tempo se você não estiver familiarizado com SQL ou PostGIS.

Você pode verificar minha configuração do sistema e meu script para obter mais detalhes. Deve incluir todas as informações necessárias.

dracodoc
fonte