2011-07-18 5 views
1

Android 플랫폼의 앱에서 일정 기간 동안 경과 된 거리를 계산하려고합니다.
이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
현재로서는 LocationListener 인터페이스를 구현 중입니다.
나는 방법 I 현재이 같은 일을 오전일정 기간 동안 이동 거리를 계산하는 가장 좋은 방법은 무엇입니까?

을 onLocationChanged 무시하고 :

public void onLocationChanged(Location location) { 
     Log.d("onLocationChanged", "onLocationChanged"); 


     old_location.set(new_location); 
     new_location.set(location); 
     totalDistanceElapsed += new_location.distanceTo(old_location); 

을} 그래서 새 위치 점 이제까지 시간 "을 이전 위치 지점으로부터의 거리를 추가하고
onLocationChanged "라고합니다. 이것이 맞습니까? 다른 조치가 필요합니까? 정확할까요? 그렇지 않다면 어떻게하면 더 정확하게 만들 수 있습니까? 덕분에

+0

달려있는 정도에 따라 다릅니다. 나에게 가장 좋은 방법은 매 x 번 (예 : 30 초) GPS 위치를 기록한 다음 거리를 계산하는 것입니다. 컨텍스트에 따라 변경 될 수 있습니다 ... 아마도 다른 방법은 속도를 기반으로 샘플 시간을 계산하는 것입니다. 속도가 높으면 샘플 속도가 향상됩니다. :) – ykatchou

+0

좋은 질문입니다. totalDistanceElapsed 속성은 이동하지 않을 때 증가하지 않는 속성이 있어야합니다. 얼마나 정확한 위치인지 모르겠으므로 전화기가 움직이지 않는 곳에서 totalDistanceElapsed가 증가하지 않는지 확인하는 테스트를 권합니다. 참으로 증가한다면 10m의 공차를 추가 할 수 있습니다. 공차보다 작 으면 이벤트를 무시할 수 있습니다. –

+0

감사합니다. 이제 "전화가 움직이지 않는 곳을 테스트하는 방법"을 모르겠습니다. 다시 도와 주시겠습니까? 고맙습니다 – dewijones92

답변

3

시간이 지남에 따라 이동 거리를 결정하는 간단한 방법은 매 순간 수정을 구하고 각 수정에 대해보고 된 속도 (초당 미터)를 읽고 기록하는 것입니다. 그런 다음 여행 한 거리는 경과 한 기간 동안의 모든 속도의 합계입니다.

"지터"를 이동으로 계산하지 않으려는 경우 (예 : GPS 수정으로 인해 수정 사항이 천천히 돌아 다니고 있지만 기기가 실제로 고정되어있는 경우) 속도 임계 값을 설정할 수 있습니다. 일정 수준 이하의 속도를 무시하거나 표제가 수정 사이에 빠르게 변하는 경우. 이 임계 값은 사용 된 GPS 기기에 따라 달라질 수 있으며 일부 기기에는 이미 이러한 종류의 것이 내장되어 있습니다 (즉, 속도가 너무 느리면 0m/s를보고합니다).

그러나 실제로 기기에 의존합니다. 예를 들어, 초기 모델 인 Samsung Galaxy I9000은 초당 약 0.5 미터의 맑은 하늘 상태에서도 20 미터 반경의 지역을 방황합니다. 따라서 10 분 동안 현장에 고정되어 있으면 위 알고리즘은 이동 한 것으로보고합니다 300m.

관련 문제