Geocódigo em massa 20 milhões de endereços nos EUA


34

Existem bancos de dados gratuitos ou com preços razoáveis ​​para os EUA que possam ser pesquisados ​​e retornar informações de latitude e longitude?


Rapido é bom, mas precisão é tudo. - Wyatt Earp Ao lidar com um geocoder, existem alguns (como um referenciado neste segmento) que oferecem um preço baixo para geocodificar muitos endereços, mas se você estiver procurando por uma precisão muito fina em muitas áreas diferentes, precisará seguir com um geocoder premium. Os resultados serão mais consistentes e extraordinariamente precisos, especialmente quando a correspondência postal não ocorrer. Não há muito com o que você possa competir no que diz respeito à geocodificação mais precisa; caso contrário, seus cálculos não serão

2
Você oferece sua opinião sobre a necessidade de alta qualidade, mas nenhuma sugestão. Forneça algumas de suas sugestões, caso contrário, isso não ajudará a responder à pergunta dos usuários.
RyanDalton

Respostas:


30

Para tantos registros, nem considere um serviço da web. Eles irão estrangulá-lo ou cortá-lo antes que você possa concluir sua tarefa.

Portanto, sua opção passa a ser executada localmente e, para isso, você tem várias opções comerciais ou gratuitas.

As opções gratuitas usarão o conjunto de dados do censo TIGER que você precisará carregar em um banco de dados espacial. Você pode encontrar bibliotecas que codificam geograficamente no TIGER for PostGIS ou mesmo no sqlite . Você pode até usar o ArcGIS para geocodificar contra o TIGER. Obviamente, o ArcGIS não é gratuito, o que me leva às próximas opções comerciais. Se você possui uma licença do ArcGIS, é possível ter o StreetMap DVD com um conjunto de dados TeleAtlas ( quero dizer Tom Tom ) ou Navteq. Isso depende se você tiver o StreetMap Premium incluído. Qualquer um desses dois conjuntos de dados provavelmente fornecerá resultados mais consistentes que o TIGER.

Faça um favor a si mesmo e faça várias cópias do banco de dados de ruas assim que os dados forem carregados e execute o processo de geocodificação em várias máquinas com um subconjunto dos dados de entrada. Não tente executá-lo em apenas uma máquina ou você estará aguardando dias para que ele termine, sem mencionar que, provavelmente, qualquer processo que você execute provavelmente vazará memória e travará várias vezes antes de terminar. Isso significa que você deseja ter diferentes pontos de verificação para o seu processo.


2
Eu achei benéfico dividir os dados de entrada e endereço em porções menores (como estados). Isso torna os localizadores mais rápidos de usar e os processos têm menos probabilidade de travar após a execução por muito tempo. Geralmente, não é muito difícil criar um loop baseado em estado para fazer a criação e o geocodificação do localizador de uma só vez.
Nathanus

26

Eu trabalho na SmartyStreets (uma empresa de verificação de endereço). Nosso serviço é gratuito para todos (até o nível básico). As startups também podem solicitar o uso gratuito de nosso serviço pelo primeiro ano. Portanto, se você se encaixar nessa classificação, não haverá cobrança pelo serviço ilimitado por um ano.

A Ragi recomenda um serviço da Web; no entanto, nossa API pode facilmente limpar, padronizar e geocodificar 20 milhões de endereços para você em cerca de 5 horas (aproximadamente 1000 por segundo). Parte desse tempo dependerá da velocidade da sua máquina (quantos núcleos você possui) e da sua conexão de rede (não tente através de 3G, mas uma conexão de banda larga padrão funcionará perfeitamente).

Só queria salientar que certamente é possível com um serviço da web.

Atualização: a partir de 1 de agosto de 2017, eu testei remotamente nosso serviço da Web e obtive 70.000 pesquisas por segundo usando apenas um único MacBook Pro 2015 em uma rede sem fio. Sim, é muito rápido. Isso significa que uma lista pequena, como 20 milhões de endereços, levaria apenas cerca de 5 minutos.


2
Bem, se você permitir que ele codifique geograficamente 20 milhões de registros sem cobrar um centavo e possa fazer 1000 / solicitações por segundo (extremamente impressionante), então é claro que essa é uma solução melhor do que construir sua própria pilha do zero.
Ragi Yaser Burhum 07/03/12

11
Absolutamente. 1000 / segundo, não o máximo. É apenas um bom padrão. Multithreading, múltiplos núcleos e conexões de rede mais rápidas podem até aumentar esse rendimento. Temos um cliente recente sem fins lucrativos que acabou de usar nosso serviço para processar 180 milhões de endereços. Com as eleições nacionais chegando, muitos grupos estão tentando limpar e geocodificar seus endereços.
11137 Jeffrey

11
@RagiYaserBurhum Observe que Chris também está procurando soluções com "preços razoáveis". Certamente, construir sua própria pilha do zero pode ser "gratuito", mas será que você realmente considera o seu custo de oportunidade? O benefício que você ganha ao fazer tudo sozinho: potencialmente sem custos ("grátis"). A vantagem de usar um serviço existente: economizando muitas horas e horas. Além disso, mil solicitações / segundo provavelmente são rotineiras atualmente com arquiteturas da Web modernas (paralelização) para lidar com cargas de tráfego constantes. No final, acho que, para esse assunto, "grátis" e "com preços razoáveis" é uma questão de preferência.
Matt

11
@Matt Hands down "free" nem sempre é free.I não vou argumentar contra isso (seu tempo vale dinheiro). Estou ciente de que o custo para a maioria das soluções de código aberto é realmente uma mudança no modelo de custo das licenças de uso para os serviços de suporte. Eu não estava tentando ser irônico, acho que, se Jeffey puder oferecer a solução de graça (ou mesmo com preços razoáveis), essa é a melhor solução. Com o melhor preço listado da SmartyStreets, 20 milhões de pontos custariam US $ 100.000. Tenho certeza que, mesmo nos casos de uso comercial, eles podem custar uma fração do custo.
Ragi Yaser Burhum 07/03/12

11
Também 1000 / req por segundo, o que é muito viável em arquiteturas contemporâneas, ainda exigiria alguma engenharia impressionante para geocodificação . Eles estão recebendo meus adereços para fazer isso :)
Ragi Yaser Burhum

8

Eu usei este passo a passo descrevendo como criar um geocoder postgis usando os dados do TigerLine 2010. Estou executando agora - não é rápido, pois levará três semanas para geocodificar 2 milhões de endereços.

No entanto, é gratuito, sem restrições e levou alguém com habilidades mínimas de codificação e postgres a menos de 2 dias para configurar e carregar os dados de um (grande) estado para começar a geocodificação. Também não fiz absolutamente nenhum ajuste no postgres para o sistema e ele está sendo executado em montagens NFS, então suspeito que haja uma ou duas ordens de magnitude em ganhos de desempenho que eu poderia obter se necessário.

Em vez de usar serviços da Web, carreguei todos os meus endereços no banco de dados postgres e, em seguida, estou executando um script perl rápido e sujo para geocodificá-los todos, um de cada 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 

(quebras de linha apenas para facilitar a leitura)

Portanto, isso gera uma instrução de atualização "geocodifica o endereço com esse valor de ID e usa a melhor correspondência" e o envia ao psql para fazê-lo. Ele só tenta geocodificar endereços sem classificação - ou seja, aqueles que ainda não foram geocodificados. Portanto, é reinicializável e cada um é feito de forma independente.


Você achou os dados do TigerLine 2010 imprecisos para alguns endereços?
Chris Muench

Não são dados perfeitos, por qualquer meio; no entanto, os dados de endereço que tenho são sépticos de uma perspectiva de qualidade. O geocoder, conforme escrito, fornece um campo de "classificação", onde menor é melhor. Vou adicionar um exemplo à minha resposta.
Adam Musch

@ ChrisMuench: Se você me der um ou dois endereços na Califórnia, ficaria feliz em filmar através do meu geocoder para mostrar a você - dessa forma, não os estou escolhendo.
Adam Musch 9/03/12

Bem, eu tentei o geocoder postgis para algum endereço em NY, e eles poderiam estar fora por 500 pés 1 milha
Chris Muench

Isso é muito tarde para você, mas alguém pode achar útil ... Verifique se o seu endereço analisa bem. Descobri que minha simples concatenado "123 Oak St. Anytown ST 12345" foi acelerado pela 550X quando eu adicionei vírgulas: "123 Oak St., Anytown, ST, 12345"
aaryno

3

Suponho que você queira geocodificar, mas não pague nada por isso? Há vários serviços em que você pode codificar geograficamente 20 milhões de registros, mas isso custará. Esri, Pitney Bowes e outros oferecem esses serviços por assinatura ou com um custo por x geocódigos. 20 milhões não são triviais, mas suponho que exista um argumento comercial para isso.



3

Este post provavelmente é tarde demais para ajudar o pôster original. No entanto, para outros que buscam georreferenciar grandes quantidades de dados de graça, você pode conferir meu software chamado "Easy Georeferencer", que é criado de forma independente, fácil de usar e poderoso (veja a captura de tela na parte inferior da publicação).

O programa é simples e direto de usar e é executado diretamente de um arquivo exe que não requer instalação. Você pode optar por codificar geograficamente entre a fonte de dados GNS ou GeoNames e fazer o que nenhum outro geocoder até agora pode fazer, codificar geograficamente as províncias com base no banco de dados de unidades administrativas da GADM, bem como codificar geograficamente as fronteiras dos países históricos do conjunto de dados CShapes. A única ressalva é que ele não codifica geograficamente os dados de endereço. Todas as saídas são fornecidas como shapefiles, prontas para visualização / análise imediata em um SIG.

No que diz respeito à eficiência e ao tratamento de grandes dados, o programa foi testado para geocodificar 100.000 registros em apenas 3 horas. Para conjuntos de dados maiores, o aumento esperado no tempo de processamento deve cair de forma curvilínea, porque grande parte do tempo de processamento vai apenas para a fase inicial quando os conjuntos de dados de referência do país são carregados, mas é retomada posteriormente. Além disso, não é necessário se preocupar com gargalos na Internet ou problemas de conectividade ao geocodificar grandes conjuntos de dados, porque o software, os conjuntos de dados de referência e o processamento são todos baseados no computador local. As taxas de correspondência podem chegar a 80-90 por cento, porque se baseiam na correspondência de nomes difusos para diferenças de ortografia.

Mais detalhes, incluindo um artigo introdutório e um guia para iniciantes, estão incluídos no pacote de download. Não há necessidade de hesitar em tentar, o programa é apenas um arquivo simples que você pode colocar e executar na sua área de trabalho sem qualquer compromisso ou confusão do seu computador.

O software pode ser baixado em: http://geocodeanything.wordpress.com/

Espero que ajude.

insira a descrição da imagem aqui


Você sempre deve divulgar quem é o autor / desenvolvedor e / ou o trabalho da empresa que produz um produto de software.
RyanDalton

@RyanDalton Eu divulguei que eu era o autor quando escrevi "software que criei", embora eu possa ver como isso pode ter passado despercebido, porque não foi dada muita ênfase à frase. Alterei minha redação para, com sorte, tornar mais claro que estou perdoando meu próprio software.
quer

2

Como você geocodificará endereços nos EUA, acho que a ferramenta Endereço para coordenadas do Data Science Toolkit deve funcionar bem para você.

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.

Você pode fazer o download da máquina virtual e executá-la no seu próprio hardware. Dessa forma, você não precisa se preocupar com os limites da API e também o controla. Ah, e eu disse que é grátis? ;-)


Isso é incrível! Estou surpreso por nunca ter ouvido falar disso antes. Além disso, é ótimo que você possa baixar a VM e tê-la pronta para executar em seu próprio sistema.
RyanDalton

É de código aberto também. :) github.com/petewarden/dstk
RK

2

Não vi nenhuma referência ao nível de precisão de que você precisa, mas estou supondo que você queira um telhado longo ou próximo a ele. A qualidade do endereço de entrada também pode ser um fator. Uma lista de endereços bem limpa codificará melhor e mais rapidamente do que uma lista de endereços incompletos ou incorretos. Além disso, uma taxa de acerto de 90% é aceitável ou você precisa de todos os 20 milhões de endereços codificados? Não tenho uma solução gratuita, mas existe uma relativamente barata que eu conheço e uso. ZP4 da Semaphore Corp, http://www.semaphorecorp.com/oferece um lavador / geocoder de endereço e complementos que processam os endereços e retornam um endereço limpo, um sinalizador que indica se o endereço pode ser entregue pelo USPS e a latência longa para o ZIP + 4. A precisão ZIP + 4 geralmente é próxima da precisão do telhado nas áreas construídas (lado correto da rua e no quarteirão correto) e não nas áreas rurais. O custo para uma licença de 30 dias é de US $ 120. Após esse período, o depurador de endereços continuará funcionando, mas a Validação do Ponto de Entrega (DPV) e os retornos geográficos não funcionarão. Com um computador relativamente rápido, construído nos últimos dois anos, e todos os dados armazenados e acessados ​​localmente, os 20 milhões de registros devem ser feitos em cerca de 10 dias. Venho geocodificando endereços nos últimos 15 anos e tenho usado o ZP4 na maior parte desse tempo. Antes de oferecerem latência longa ou DPV,


2

Estou geocodificando 18 milhões de endereços agora, então quero compartilhar minha configuração.

Basicamente, usei um manual ansible para configurar a instância do Amazon EC2 como um servidor PostGIS Tiger Geocoder, depois usei o script para lotes de endereços de geocódigos, mapeei-os para o bloco de censo.

O custo do Amazon EC2: requisito mínimo de 180G SSD custa cerca de US $ 18 / mês. Minha instância t2.large custa cerca de US $ 90 / mês no total.

Se você possui uma caixa Linux com SSD> 180G, também pode usá-la basicamente de graça.

Meu desempenho médio é de cerca de 170 ~ 300 ms / endereço de boa qualidade, 400 ~ 600 ms / endereço de qualidade ruim. Por má qualidade, quero dizer que muitos deles têm cidade, código postal ou mesmo endereço errado ou faltam. Esse tipo de endereço leva muito mais tempo para o geocódigo, portanto, seu desempenho depende da qualidade da entrada. A instância do Amazon EC2 que usei pode codificar geograficamente cerca de 4 milhões de endereços formatados realmente ruins em um mês.

Para obter mais detalhes, consulte minha postagem no blog sobre a configuração e os scripts do sistema.



1

Se o seu fluxo de trabalho estiver em Python, a geopy é uma ótima solução. Você pode escrever sua lógica básica de geocodificação de forma abstrata e escolher um dos muitos provedores (ArcGIS, Baidu, Bing, DataBC, GeocodeFarm, GoecoderDotUS, GeoNames, Google, IGN France, LiveAddress, NaviData, Nominatim (OSM), OpenCage, OpenMapQuest, Localizador do Yahoo BOSS Place, What3Words, Yandex ... ufa). Você pode até usar todos eles e, finalmente, escolher o ponto que tem a maior confiança de estar correto através da validação por vários serviços de geocodificação. Muitos desses serviços exigem registro (mas não todos). Eles podem não ser igualmente adequados para uso nos EUA, mas o benefício de fazê-lo com uma função Python pura é que você deve poder controlar isso.

Aqui está um pequeno exemplo:

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, a única parte difícil é garantir que seus endereços não sejam mal formados. Provavelmente ainda levará um tempo considerável para geocodificar 20 milhões de locais, no entanto ... e esse tipo de carga provavelmente violará os termos de serviço de alguém. Espero que isso ajude alguém.


posso usar um CSV com isso?
Salman

Claro, se você o ler com Python.
alphabetasoup

0

se sua solicitação de geocódigo não exceder 2.500 por dia, você poderá usar a API de geocodificação do Google . você deve dar uma olhada na API, ela pode retornar aos resultados como json ou xml.

Limite de uso:

O uso da API de geocodificação do Google está sujeito a um limite de consulta de 2.500 solicitações de localização geográfica por dia. (O usuário da API do Google Maps para Empresas pode realizar até 100.000 solicitações por dia.)

Exemplo:

http://maps.google.com/maps/geo?key=yourkeyhere&output=json&q=520+3rd+Street+San+Francisco+CA

Resultado de exemplo:

{
  "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 você pode conferir um exemplo de link para geocodificação no google:

1. Código Único

2. Geocodificação Reversa

3. Começando com o Google GeoCoding

espero que ajude você


15
Isso levaria apenas 22 anos (8.000 dias) para geocodificar 20 milhões de locais. Solução totalmente razoável.
Andy W

i sabem disso e eu expressei se o seu pedido geocode não exceda 2.500 por dia, ele pode usá-lo ... esta é uma opção se ele não puder encontrar qualquer solução
Aragon

4
Isso viola os termos de serviço. É ilegal, a menos que você exiba os resultados em um mapa do Google. Mesmo se você fizer isso, acho o "argumento de cache" que algumas pessoas usam um pouco mais para 20 milhões de recursos!
Ragi Yaser Burhum 07/03/12
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.