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

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
            );
    

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

    • 로케이션 매니져 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

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.