Filtre por CEP ou outras estratégias de recuperação de dados baseadas em localização

StackOverflow https://stackoverflow.com/questions/12823

  •  08-06-2019
  •  | 
  •  

Pergunta

Meu pequeno site deveria agrupar uma lista de itens de uma tabela usando a localização do usuário ativo como filtro.Pensar Lista de Craigslist, onde você pesquisa por "dvd' mas os resultados não são de todo o banco de dados, eles são filtrados por um local selecionado.Minha pergunta tem 2 níveis:

  1. devo ir ao Craigslist e pedir aos usuários que usem um local no nível da cidade?Meu problema com isso é que você precisa gerar o que me parece uma lista de locais codificada e feita à mão.
  2. devo ir a-la-zipCode.A ideia de apenas pedir ao usuário que digite seu CEP, e depois agrupar todos os itens que estão no mesmo ou a uma certa distância de seu CEP.

Parece que prefiro o método do código postal, pois parece uma solução mais elegante, mas como é possível criar um banco de dados de todos os códigos postais e implementar a função que, dado o código postal 12345, obtém todos os códigos postais a uma distância de 1 milha?

esta deve ser uma "tarefa" bastante comum, já que muitos sites têm uma necessidade semelhante à minha, por isso espero não reinventar a roda aqui.

Foi útil?

Solução

Obter um banco de dados de CEP não é problema.Você pode experimentar este gratuitamente:http://zips.sourceforge.net/

Embora eu não saiba quão atual é, ou você pode usar um dos vários provedores.Temos uma assinatura anual para ZipCodeDownload.com, e por talvez US $ 100, recebemos atualizações mensais com os dados mais recentes do CEP completos com Lat/Longs do centróide do CEP.

Quanto à consulta de todos os zips dentro de um determinado raio, você precisará de algum tipo de biblioteca espacial.Se você tiver apenas uma tabela de zips com lats/longs, precisará de um mecanismo orientado a banco de dados.O SQL Server 2008 tem esse recurso integrado e há bibliotecas de código aberto e bibliotecas comerciais que adicionará esses recursos ao SQL Server 2005.O banco de dados de código aberto PostgreSQL possui um projeto, PostGIS, que adiciona esse recurso a esse banco de dados.Está aqui: http://postgis.refractions.net/

Outras plataformas de banco de dados provavelmente têm projetos semelhantes, mas esses são os que conheço.Com uma dessas bibliotecas baseadas em banco de dados, você poderá consultar diretamente qualquer CEP (ou qualquer linha de qualquer tipo que tenha colunas de latitude/longitude) dentro de um determinado raio.

Se quiser seguir um caminho diferente, você pode usar ferramentas espaciais com uma biblioteca de mapeamento.Existem opções de código aberto aqui também, como SharpMap e muitos outros (O Google pode ajudar) que pode usar os mapas gratuitos do Tiger para os Estados Unidos como fonte de dados.No entanto, esta rota é um pouco mais complicada e possivelmente menos eficiente se tudo o que você precisa é de uma pesquisa de raio.

Finalmente, você pode querer examinar um serviço da web.Isso, como você disse, é uma necessidade comum, e imagino que existam vários serviços da web que você pode assinar e que podem fornecer todos os CEPs em um determinado raio a partir de um CEP fornecido.Uma rápida pesquisa no Google revelou isto:http://www.zip-codes.com/free-zip-code-tools.asp#radiusMas há MUITOS recursos disponíveis para a busca nesse assunto.

Outras dicas

como diabos alguém [...] implementa a função que dado o CEP 12345, obtém todos os CEPs em uma distância de 1 milha?

Aqui está um exemplo de como fazer isso:

http://www.codeproject.com/KB/cs/zipcodeutil.aspx

Só para ser técnico...PostGIS não é um projeto da comunidade Postgres...é um projeto independente construído sobre o Postgres.Se você quiser ajuda ou suporte com PostGIS, você vai querer ir para sua comunidade em vez de Postgres.

Você pode usar PostGIS.Além disso, usei as bibliotecas de mapeamento do deCarta.Eles possuem tecnologia que permite a geocodificação de qualquer tipo de dados arbitrário.Então você pode consultá-los espacialmente.

isenção de responsabilidade:Eu trabalho para deCarta

Não seria mais eficiente apenas descobrir quais cidades estão num raio de 1,6 km e armazenar essas informações em uma tabela?Assim você não precisa fazer cálculos no banco de dados o tempo todo.

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