Pergunta

Eu tenho um aplicativo que usa a API do Google Maps para distâncias geocode entre pares latitude / longitude como uma maneira de exibir as pessoas próximas a você em seu telefone (atualmente Android, trabalhando no iPhone). A questão é que, mesmo com um grupo de teste de 40 usuários, estamos levando mais de 10 segundos para fazer nossos cálculos e envia os resultados de volta para os usuários. Enquanto 10 segundos soa como um longo tempo, não é realmente um problema na medida em que o aplicativo cliente vai, porque não é uma atualização em tempo real dos locais das pessoas (as atualizações ocorrem a cada poucos minutos). Obviamente este é um problema embora desde nós obviamente amor a rampa até a dezenas ou mesmo centenas de milhares de usuários. Estou curioso para saber se alguém tem alguma experiência nesta área no que diz respeito ao uso da API do Google Maps para o cálculo de distâncias entre pontos para grandes volumes de dados?

Como um aparte, estamos usando Rails no servidor, que é onde todos os cálculos de localização estão ocorrendo. O telefone (s) são meramente exibindo os mapas e atualizar o servidor com Lat Long coordenadas /.

Foi útil?

Solução

Dê uma olhada Geokit , é uma gema do rubi e Rails plugin para fazer o que quiser e mais, eu acho que você vai ser muito feliz com a velocidade e apresenta também.

Outras dicas

Você não precisa da API do Google Maps para distâncias calcular quando você já tem coordenadas lat / lon. Calculando o grande-círculo distância pode ser feito usando ou Haversine vincenty fórmula.

Editar: Se eu entender o seu problema corretamente (encontrar locais perto de um local determinado em 10.000 registros) eu só posso recomendar usando alguma biblioteca geo para esta finalidade. Calculando 10k distâncias é uma má idéia quando mais pedidos estão chegando. Você deve definitivamente olhar para algoritmos mais inteligentes para que (a árvore quad parece prático).

Você pode querer considerado converter lat tempo para uma projeção equidistante localizada antes de fazer quaisquer cálculos, se você está cobrindo uma área específica. Ou, mais simplesmente, se cobrindo áreas globais, converter o lat tempo para as duas zonas UTM mais próximas, armazenando dois conjuntos de coordenadas X Y e as duas zonas IDs UTM. Depois, você pode selecionar registros na zona UTM corresponde em primeiro lugar, e realizar seus cálculos contra esse subconjunto usando as coordenadas projetadas segundo (que será significativamente mais rápido do que o cálculo da distância a partir de Lat Long).

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