안드로이드 gps 누적 이동거리 측정 조언 부탁드립니다
조회수 4679회
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
로케이션 매니저 등록한후에 onLocationChanged 리스너에
if(beforeLocation == null){
beforeLocation = location;
}else{
distance += beforeLocation.distanceTo(location);
beforeLocation = location;
}
이렇게 해서 누적이동거리를 측정하려했는데 측정이 이상하게되는게 되더라구요 (사실은 테스트할때 beforeLocation = location; 이부분을 누락했었는데, 그럼 점점 멀리갈수록 이동거리가 크게 증가해야 할터인데 너무 적게 이동거리가 올라가더군요..) 제가 잘못 코딩한건가요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
이동거리가 길어지면 정확도가 떨어지는것 같네요. 강남역 37.4979° N, 127.0276° E 역삼역 37.5008° N, 127.0369° E 를 가지고 distance를 구하면 1053미터 잘 나오는데요.
역삼역에서 부산(35.1796° N, 129.0756° E)사이의 거리를 구하면 277Km가 나오네요. 직선거리가 최소 300km는 넘어야 할텐데요.
안드로이드 에뮬레이터에서 앱을 돌리고 안드로이드 디바이스모니터를 가지고 가상위치를 앱에 전송했습니다.
LocationListener는 다음과 같이 만들었습니다.
private LocationListener locationListener = new LocationListener() { double distance=0; @Override public void onLocationChanged(Location location) { LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); // Get the last location. if(lastKnownLocation==null) { lastKnownLocation = location; } else { distance=lastKnownLocation.distanceTo(location); Log.i("Distance","Distance:"+distance); lastKnownLocation=location; } } @Override public void onProviderDisabled(String provider) {} @Override public void onProviderEnabled(String provider) {} @Override public void onStatusChanged(String provider, int status, Bundle extras) {} };
그리고 아래와 같이 동작했어요.
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates( LocationManager.GPS_PROVIDER, 1000, 10, locationListener );
참고로 누적 이동거리를 구하는 부분은 테스트 안해봤어요.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 로케이션 매니져 requestLocationUpdates 등록할때 파라미터로 넣는 값에 따라 onLocationChanged가 불리는것이 맞나요? 제가 좀 잦게 설정해놨으니 말씀하신부분은 영향이 없지 않을까요..? (5미터 / 30초) 알 수 없는 사용자 2016.4.11 18:42
- 아 그리고 개인적으로 궁금한데 distanceTo 를 사용하면 고도도 영향이있나요? 알 수 없는 사용자 2016.4.11 18:45
- 5미터 30초 정도면 제가 말씀드린 서울/부산 정도에서 발생하는 오류는 아니겠네요. 혹시 폰의 문제일수도 있는것 같습니다. 코드를 에뮬레이터에서 한 번 돌려보시면 어떨까요. 알 수 없는 사용자 2016.4.11 20:04
- 그리고 고도에 영향이 있는지는 저도 궁금하네요. setLongitude, setLatitude, setAltitude로 값을 지정한 두개의 Location으로 거리를 구해보면 알 수 있을것 같습니다. 알 수 없는 사용자 2016.4.11 20:05
-
댓글 입력