Pergunta

Eu estou trabalhando em um aplicativo onde um dos requisitos é que eu seja capaz de realizar operações de geocodificação reversa em tempo real com base em dados de GPS. Em particular, eu devo ser capaz de determinar o estado / província para que a latitude, longitude mapas par e detectar quando passamos de um estado / província para outra.

Eu tenho algumas idéias até agora, mas se perguntou se alguém tinha alguma ideias sobre um dos seguintes procedimentos:

  • O que é a melhor abordagem para lidar com este problema de uma maneira eficiente?
  • Onde é um bom lugar para encontrar e qual é o formato apropriado para norte-americanos fronteiras do estado / província

Para começar, aqui estão as duas ideias principais que eu tenho:

  1. Break América do Norte em uma grade com cada retângulo no mapeamento de grade para uma determinada província Estado. Faça uma pesquisa sobre esta tabela (que cresce rapidamente o mais preciso que você gostaria de ser) com base na latitude e longitude (ou vice-versa).
  2. Definir polígonos para cada um dos estados e fazer algum tipo de cálculo para determinar em que polígono uma latitude / longitude par mentiras. Eu não sei exatamente como ir sobre isso. mapas de imagem HTML vêm à mente como uma forma de definir os limites para um estado / província.

Eu estou trabalhando em python para o interessado ou aqueles que possam ter uma biblioteca agradável que gostaria de sugerir.

Para ser claro ... Eu não tenho acesso à web disponível para mim, portanto, usando um serviço de geocodificação reversa existente não é uma opção em tempo de execução

Foi útil?

Solução

Eu sugiro usar uma variante da sua primeira idéia: Use um espacial índice . Um índice espacial é uma estrutura de dados construída a partir de rectângulos, o mapeamento de latitude / longitude para a carga útil. Neste caso, você provavelmente irá mapear retângulos para pares estado-província. Um R-tree pode ser uma boa opção. Aqui está um pacote de python R-tree . Você poderia detectar em roaming, comparando os resultados de pesquisas consecutivas.

Outras dicas

Eu criei um módulo de geocodificação reversa offline por países: https://bitbucket.org/richardpenman/reverse_geocode

>>> import reverse_geocode 
>>> coordinates = (-37.81, 144.96), (31.76, 35.21)
>>> reverse_geocode.search(coordinates)
[{'city': 'Melbourne', 'code': 'AU', 'country': 'Australia'},
 {'city': 'Jerusalem', 'code': 'IL', 'country': 'Israel'}]

Vou ver se eu posso adicionar dados para os estados.

Gostaria de ficar longe de implementar sua própria solução a partir do zero. Este é um muito grande compromisso e já existem ferramentas para fora lá para fazer isso. Se você está procurando uma abordagem de fonte aberta (leia-se livre), dê uma olhada neste post: Usando PostGIS a geocodificação reversa .

Se você pode se apossar de fronteiras estatais como polígonos (por exemplo, via OpenStreetMap), determinando o estado atual é apenas um teste de ponto no polígono.

Se você precisa de dados de endereços, uma solução desligada seria usar o Microsoft MapPoint.

Você pode obter dados para todo os estados unidos de mapa de rua aberto Você poderia, então, extrair os dados que precisa, tais como cidade ou estado locais em que sempre formato funciona melhor para sua aplicação. Nota ainda que a qualidade dos dados é bom, não é garantido para ser tão completamente precisa se precisar de uma precisão absoluta você pode ter que procurar em outro lugar.

Eu tenho um banco de dados com todos esses dados e algumas ferramentas de acesso. Eu fiz o meu a partir dos dados do censo tigre. Imagino que ia ser basicamente uma exportação de meu banco de dados para sqlite e um pouco de tradução de código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top