안드로이드 gps 누적 이동거리 측정 조언 부탁드립니다


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; 이부분을 누락했었는데, 그럼 점점 멀리갈수록 이동거리가 크게 증가해야 할터인데 너무 적게 이동거리가 올라가더군요..) 제가 잘못 코딩한건가요?


조회수 544


1 답변


좋아요
0
싫어요
채택취소하기

이동거리가 길어지면 정확도가 떨어지는것 같네요. 강남역 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
        );

참고로 누적 이동거리를 구하는 부분은 테스트 안해봤어요.

  • 2016년 04월 11일에 작성됨

  • 로케이션 매니져 requestLocationUpdates 등록할때 파라미터로 넣는 값에 따라 onLocationChanged가 불리는것이 맞나요? 제가 좀 잦게 설정해놨으니 말씀하신부분은 영향이 없지 않을까요..? (5미터 / 30초)     Jinoh Kim   2016.4.11 18:42     
  • 아 그리고 개인적으로 궁금한데 distanceTo 를 사용하면 고도도 영향이있나요?    Jinoh Kim   2016.4.11 18:45     
  • 5미터 30초 정도면 제가 말씀드린 서울/부산 정도에서 발생하는 오류는 아니겠네요. 혹시 폰의 문제일수도 있는것 같습니다. 코드를 에뮬레이터에서 한 번 돌려보시면 어떨까요.    GreppTod   2016.4.11 20:04     
  • 그리고 고도에 영향이 있는지는 저도 궁금하네요. setLongitude, setLatitude, setAltitude로 값을 지정한 두개의 Location으로 거리를 구해보면 알 수 있을것 같습니다.    GreppTod   2016.4.11 20:05     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close