Eu tenho um banco de dados com 300.000 endereços, que devem ser mostrados no mapa. Eu sei que se eu codificar geograficamente todo o endereço, será muito caro para mim. Então, eu queria saber se é possível codificar geograficamente o endereço on-line / em tempo real, quando um usuário seleciona um endereço (um endereço de propriedade), ele pesquisa no banco de dados e depois codifica geograficamente o endereço e mapeia-o com outros atributos.
Seria muito bom se você pudesse compartilhar um código, conceito ou qualquer coisa. A propósito, meu back-end está no mysql suportado pelo Joomla.
google-maps
geocoding
php
mysql
google-maps-api
user1089553
fonte
fonte
Respostas:
Mehul, eu costumava trabalhar no setor de verificação de endereços com uma empresa chamada SmartyStreets. Existem muitos serviços de geocodificação por aí, mas poucos suportam o processamento em lote com o volume necessário. (O Google e outros não permitem o uso em massa de suas APIs ou resultados de armazenamento / armazenamento em cache.)
Se você for ao seu banco de dados MySQL e fizer uma exportação da sua tabela que contém os endereços, salve-a como um arquivo CSV, por exemplo. Você pode processá-lo usando a ferramenta da web SmartyList ou a ferramenta de linha de comando . Como eu disse, existem vários serviços por aí, mas presumo que deseje algo que verifique a existência de endereços também (daí o motivo da geocodificação) - se o endereço estiver errado ou incompleto, os resultados da geocodificação também serão . Apenas alguns serviços fazem isso.
O LiveAddress é um serviço certificado pelo CASS pelo USPS. Existem alguns por aí, assim como sua pesquisa, mas você deseja algo "on-the-fly" / rápido e barato, então recomendo o LiveAddress. Ele não apenas verifica o endereço, mas também faz o que você precisa, que fornece informações de lat / lon e também a precisão dos resultados de geocodificação. É tudo baseado na Web e processará dezenas de milhões de registros rapidamente (veja esta pergunta como referência ).
Se você precisar mais geocodificar endereços à medida que os usuários estiverem interagindo, o LiveAddress também possui uma versão da API que pode ser conectada a praticamente qualquer coisa e também suporta processamento em lote on-the-fly, mas é pago como uma assinatura, não apenas uma vez. Forma de pagamento.
fonte
Se você gosta de Python, pode usar a API GeoPy , combinada com as ligações GDAL Python ou Fiona , e criar um script muito básico como esse para converter os endereços em um shapefile de ponto.
Isso irá geolocalizar um arquivo chamado 'address_to_geocode', criando um shapefile de saída chamado 'my_output.shp' na pasta my_output:
O arquivo deve ter apenas uma linha para um único endereço, como por exemplo:
Aqui estou usando a API do Google, mas com o GeoPy é muito básico mudar para API diferente, como Yahoo !, GeoNames ou MapPoint .
fonte
Outra opção para resolver seu problema seria importar seu conjunto de dados para tabelas de fusão e definir o campo de endereço como local. Em seguida, ele codificará os pontos automaticamente. Depois de concluído, você pode exportar os dados como KML.
Ou ... como alternativa, você pode escrever um script php para usar o geocoder do yahoo, que tem um limite de 50.000 registros; assim, mais cedo ou mais tarde, todos os seus pontos serão geocodificados no banco de dados.
Espero que isso tenha ajudado!
fonte
de longe o melhor e mais fácil geocoder que usei https://pypi.python.org/pypi/geocoder/1.8.0 bing maps, google maps, OSM etc.
fonte
Talvez não seja a melhor resposta para sua pergunta, mas você pode tentar o BatchGeo. A versão gratuita faria você sofrer muito, mas ainda era bom o suficiente para o meu trabalho. No entanto, nós compramos a versão pro.
O truque para obter coordenadas do arquivo KML é importá-lo para o ArcGIS posteriormente.
fonte
Eu tenho usado com êxito a geopy que usa o serviço da web de geocodificação do Google. Funciona perfeitamente para até 2k pontos por 24 horas.
fonte
Matej, isso porque a API do Google permite gerar até 2,5 mil por dia.
Sobre a solução Geo, o lote ainda não é suportado, porque, a partir da minha análise do código geo python, parece que ele abre uma conexão toda vez que ele solicita um novo cordinate, 300k provavelmente ficará para sempre (provavelmente com o erro 400).
Jogar com Poligons deve funcionar, mas depende de qual é a sua área 'Play ground', se é 1 país ou n países.
Para um país, os polígonos devem funcionar muito bem.
Para n países, a solução não funcionará, pois a coleta levará mais tempo sempre que você adicionar outro país. O melhor aproch para fazê-lo é carga preguiçosa.
=> comece com a idéia do polígono, tudo em outro país, crie uma grande tabela de banco de dados para armazenar os dados; eventualmente, você manterá os dados que você precisa, suponho.
fonte
Se você quiser fazer isso com PHP - MySQL, aqui está uma solução que funcionou para mim:
fonte
Experimente esta API de geocodificação . É gratuito para uso pequeno, mas se você quiser mais, eles pagam. No entanto, é barato e você pode processar com muita facilidade, eu processo milhões por mês através deles.
fonte
Você pode salvar seus dados como um arquivo de texto (um registro por linha) e depois codificá-lo em lote usando este serviço: http://geocode.xyz/batch (funciona na maioria dos países europeus)
ou, você pode escrever seu próprio código para acessar a API REST / JSON: http://geocode.xyz/api (é gratuito para pesquisas ilimitadas)
fonte
Use as ferramentas Mappointing (Apontar mapa | Ferramenta de geocodificação em lote ( http://www.mappointing.com/ )) Nesta ferramenta, você pode processar os dados usando a chave de API gratuita do mapa do Google. E também esta ferramenta está fornecendo Cálculo de distância e ferramenta de busca de local.
fonte