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

조회수 4637회
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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)