Google Map API Salvar um percurso



  • Uma aplicação mobile deve salvar todo o trajeto percorrido por uma pessoa. Digamos que a pessoa resolva viajar de SP ao RJ, quando a aplicação for acionada ela deve salvar o percurso feito pela pessoa. Os dados do percurso salvo serão enviados para um sistema de rastreamento que trabalha com a google map api. Esse sistema mostrará ao operador do mesmo qual foi o trajeto utilizado pela pessoa que viajou de SP à RJ. Não tenho experiência com google map api, mas dei uma boa lida na documentação. Encontrei lá que um percurso pode ser desenhado no mapa através do recurso de Polylines. Resumidamente o objeto polyline desenha uma linha baseada em uma sequencia de coordenadas informadas:

    printscreen

    Cada marcador no mapa da imagem, corresponde a uma coordenada que compõe o polyline.

    Agora vem a pergunta, como farei para garantir que a linha formada pelas coordenadas obtidas pela aplicação android, fiquem o mais fiel possível ao formato da estrada no mapa? Na imagem acima a polyline foi desenhada seguindo os clicks do mouse no mapa. Cada click inseria uma nova coordenada na polyline. Reparem que mesmo clicando manualmente a polyline ainda não fica perfeita, seguindo o "desenho" da estrada, mas ao menos fica aceitável.

    Pela lógica, que percebi, uma polyline ficará o mais fiel possível, dependendo da distancia em que cada coordenada foi tirada, ou seja, quanto maior a distância de uma coordenada para a outra menor vai ser a fidelidade da polyline para com o "desenho" da estrada no mapa.

    Qual seria a solução aqui? uma thread que salva a coordenada de tempos em tempos e envia para o sistema remoto? Qual seria o intervalo de tempo adequado de uma coordenada para a outra? Ou seria melhor uma thread baseada em distancia e não em tempo, visto que o viajante pode ficar parado em um local, por n motivos e a aplicação ficaria enviando coordenadas repetidas a todo momento?



  • Você vai fazer em Qt ou em Android (java)?

    Fazer pooling para pegar a posição do GPS é uma faca de 2 gumes: se for muito "rápido" come a bateria, se for "lento" você perde resolução. Mas quanto menor o tempo entre a aquisição do valor é melhor para a resolução.
    E para enviar a posição para o servidor, faça um buffer(vetor) e envie de tempos em tempos, mas com um tempo bem maior, porque usar a conexão de dados também gasta mais a bateria .

    Por exemplo:

    • Faça um pooling de 2 em 2 segundos (ou 4)- Coloque num vetor.
    • Faça um pooling de 30 em 30 segundos - Envie para o servidor o vetor.


  • Valeu Tio, a ideia é essa mesma, eu continuei pesquisando em outros fóruns enquanto essa pergunta aqui não era respondida.
    A aplicação vai armazenar as coordenadas baseadas na distancia e não no tempo, e enviará os dados para o servidor de tempo em tempo. Isso é suficiente pois não é necessário que o rastreamento seja em tempo real.
    Trata-se de uma solução para uso dentro de veículos então creio que bateria não seria um problema pois o usuário pode deixar ligado no carregador veicular. Mesmo assim não quero criar uma aplicação que vá consumir muitos recursos.
    Sim, pretendo fazer em Qt



  • @Exotic_Devel,
    O tempo aqui é relevante porque, se você armazena o valor da posição de 10 em 10 segundos e o veículo está numa velocidade considerável você perde "resolução" e vai ter que usar algum artificio (no caso usar o GoogleMaps) para interpolar o trajeto. Quanto menor o tempo de pooling melhor fica.
    Aplicações como Waze usam a posição do GPS quase de 1 em 1 segundo. E o Waze grava o trajeto que você pode ver depois (no MapEditor do site).



  • @TioRoy said:

    @Exotic_Devel,
    O tempo aqui é relevante porque, se você armazena o valor da posição de 10 em 10 segundos e o veículo está numa velocidade considerável você perde "resolução" e vai ter que usar algum artificio (no caso usar o GoogleMaps) para interpolar o trajeto. Quanto menor o tempo de pooling melhor fica.
    Aplicações como Waze usam a posição do GPS quase de 1 em 1 segundo. E o Waze grava o trajeto que você pode ver depois (no MapEditor do site).

    Verdade, e tem o outro lado também, se o veículo ficar parado em um sinal, ou preso no transito ele vai ficar armazenando coordenadas repetidas. Se bem que bastaria descartar a coordenada, caso ela seja repetida.
    Por isso minha ideia era salvar por distância, tipo, a cada 100 metros, salva a coordenada.



  • Usa um QMap/QHash onde a chave é o "LatLng". Assim você não precisa se preocupar com repetições: coletou, colocou no QMap/QHash. A única coisa que você precisa notar é que no momento de enumerar, o QMap e o QHash não mantém a ordem de inclusão, que no seu caso é importante. E não me lembro de uma classe do Container Classes que faça.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.