Comparar as 5 últimas posições do GPS (onLocationChanged)

Boa noite a todos!

Estou tendo dificuldades para elaborar o seguinte código: tenho o código onLocationChanged que me trás os valores de latitude e longitude. Preciso de uma rotina dentro dele que inicialmente acumule as 5 primeiras posições que ele trouxer em uma array ou algo do tipo e a partir do momento que ele tiver 5 posições ele irá comparar elas. Quero que esta comparação verifique se as 5 últimas posições são iguais até a quinta casa decimal, afim de “estabilizar” um ponto dentro da posição que ele irá encontrar, pois o meu foco é garantir o melhor ponto de um local onde o user estará parado.

Exemplo: o evento me trouxe:

(SITUAÇÃO IDEAL)
Instante - Posições
1 - LAT -26.123456789 ; LNG: -46.123456789
2 - LAT -26.123456789 ; LNG: -46.123456789
3 - LAT -26.123456789 ; LNG: -46.123456789
4 - LAT -26.123456789 ; LNG: -46.123456789
5 - LAT -26.123456789 ; LNG: -46.123456789

A partir do momento que eu tiver 5 dados, ele irá começar a comparar para saber se eles são iguais até a quinta casa decimal (no caso do instante 1: LAT: -26.12345, por exemplo [para quinta casa decimal])

Porém o evento vai continuar me trazendo posições, pois pode demorar até que ele dê 5 posições iguais na quinta casa decimal.

Logo enquanto ele acumula as posições, ele precisa sempre comprar no intervalo de 5. Se caso ele já me retornou 12 posições, então ele compararia do instante 7 ao 12, entende?! rs

Preciso disso, quem puder me ajudar eu agradeço!

E qual a sua dificuldade exatamente? Implementar a comparação de somente 5 elementos? Saber em que estruturas de dados usar para armazenar as coordenadas? Fazer a comparação dos números com 5 casas decimais no máximo?

Abraço.

1 curtida

@TerraSkilll exatamente estas três!
O evento onLocationChanged vai me trazer diversas posições, mas eu apenas vou comparar sempre as últimas 5 mais recentes que ele trouxer até a quinta casa decimal.

Eu preciso encontrar o ponto mais próximo a realidade em que o usuário está, pois estou desenvolvendo um aplicativo que vai registrar alguns elementos de construção e preciso apontar onde estes elementos se encontram geograficamente. O usuário vai estar registrando dados a respeito deste elemento e ele estará parado fazendo isso. Enquanto ele está parado, o GPS precisa encontrar o melhor ponto de latitude e longitude, que avalio ser o ponto que ele parado não varie até a quinta casa decimal em 5 updates seguidos.

Logo, preciso entender como implementar a comparação dos 5 últimos elementos, como eu posso armazenar os 5 últimos para realizar a comparação e como comparar até a quinta casa decimal, ou seja, exatamente o que você disse!

Se puder me ajudar, ficarei imensamente grato!

Abs

Você pode salvar essas localizações em um web-services, no sqlite ou usar o shared preferences para armazenar essas localizações.
Se você estiver usando um service no background é até melhor caso o usuário saia do app, com o shared preferences acho mais leve que buscar no sqlite caso você não tenha um webservices.
Depois que você tiver essas 5 localizações salvas ai é usar logica de programação.
No sqlite tem alguns métodos para você se mover dentro de um cursor:
moveToNext,moveToPrevious ou até mesmo moveToPoisition aonde você pode indicar para qual posição quer ir.