Googlemap показывает неправильное местоположение

#android #gps #location

#Android #gps #Расположение

Вопрос:

Я пытаюсь создать приложение для отслеживания.

Проблема в том, что местоположение, которое я получаю от gps locationlistner, верно, но местоположение, отображаемое в googlemap, неверно, по крайней мере, на 20 метров. Это показано на рисунке ниже, красная линия проводится от первого известного местоположения до обновленного местоположения через 10 секунд. Итак, чтобы быть ясным, я получил почти идеальное местоположение через 10 секунд, но все равно синий значок не меняется на него. (ОБРАТИТЕ внимание, оно увеличено до максимального)

googlemap

Код:

 public class LocationHandler{

    //Location handlers
    private LocationManager locationManager = null;

    //Keep track of current location
    private LatLng currentLatLng = null;    
    private Location currentLocation = null;

    //Bools
    private Boolean gpsLock = false;
    private Boolean gpsEnable = false;

    public LocationHandler(Activity activity) {

        int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity);

        // Showing status
        if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

            int requestCode = 10;
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, activity, requestCode);
            dialog.show();

        }else {

            // Getting LocationManager object from System Service LOCATION_SERVICE
            locationManager = (LocationManager)activity.getSystemService(Context.LOCATION_SERVICE);

            // Check type of location service
            if(locationManager != null){

                try{gpsEnable = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}

                if(gpsEnable){
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, gpsLocationListener);
                }

            }

        }
    }

    public void stopLocationUpdates() {

        if(gpsLocationListener != null){
            locationManager.removeUpdates(gpsLocationListener); 
        }
    }

    /**
     * @return the currentLocation
     */
    public Location getCurrentLocation() {
        return currentLocation;
    }

    /**
     * @return the latLng
     */
    public LatLng getCurrentLatLng() {
        return currentLatLng;
    }


    /**
     * @return the gpsLock
     */
    public Boolean getGpsLock() {
        return gpsLock;
    }


    public void setLatLng(Location location){

        if(location.getAccuracy() < 50){
            double latitude = location.getLatitude();

            // Getting longitude of the current location
            double longitude = location.getLongitude();


            // Creating a LatLng object for the current location
            currentLatLng = new LatLng(latitude, longitude);
            currentLocation = location; 
        }

    }

    private LocationListener gpsLocationListener = new LocationListener() {

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras){}
        public void onProviderEnabled(String provider){}
        public void onProviderDisabled(String provider){}       

        @Override
        public void onLocationChanged(Location location) {
            gpsLock = true;
            setLatLng(location);
        }
    };
}
  

Комментарии:

1. Мой плохой, проголосовал сейчас. 🙂

Ответ №1:

Синяя точка необязательно идеально соответствует координатам, которые вы получили от прослушивателя местоположения. Синяя точка фильтруется таким образом, чтобы избежать нереалистичных скачков. Такие скачки могут произойти, когда вы не двигаетесь.

Вероятно, вы находитесь в здании или окружены высокими зданиями.
Если вы двигаетесь (идете по улице), точка обновится, чтобы соответствовать координатам.
Далее никто не сказал, что улицы на картах Google всегда находятся в правильном положении.
Картографические компании, которые поставляют карты в Google (TomTom и Navteq), утверждают, что точность в городах составляет 5 м, а в сельской местности — 20 м.

Однако в вашем случае я предполагаю, как сказано выше, что это фильтрация синей точки. (На ios синяя точка даже выполняет экстраполяцию в будущее, если вы за рулем).

Отклонение точности в городах может достигать около 30 м, когда вы находитесь снаружи, если вы находитесь внутри здания, сидящего у окна, смещение может превышать 60 м.

Ответ №2:

Точность GPS зависит от множества факторов, таких как:

  1. Количество спутников, отправляющих данные на датчик (чем больше, тем лучше)
  2. Насколько мощным является чип GPS (портативные устройства не такие мощные).
  3. Погодные условия (чистое небо)
  4. Препятствия, такие как внутри здания и т. Д.
  5. Ваше географическое положение

Как вы упомянули, по крайней мере, на 20 метров, я думаю, что это не так уж далеко. Я видел, что датчик gps отключен более чем на 3 километра в пасмурный дождливый день в моем приложении. Как правило, точность находится в пределах 50 метров. Вы можете использовать приложение Google Maps для проверки относительной точности между вашим приложением и приложением Google.

Комментарии:

1. Но местоположение GPS, полученное слушателем, является правильным, очень точным. Это синяя точка, которая не находится на том месте, которое я получаю от GPS-прослушивателя.

2. -1: 3. неверно: GPS не зависит от дождливого или ясного неба (это зависит от вашей точки 5: свободный вид на небо), 1: частично верно, это скорее угол наклона к спутникам, а не число. 2: слишком просто; может произойти смещение на 3 км, но это крайне редко, в большинстве случаев причиной является приложение, которое получило исправление определения местоположения вышки сотовой связи и которое не может отличить исправление, полученное с помощью GPS или вышки сотовой связи / wlan

3. @AlexWien смотрите этот ответ gis.stackexchange.com/questions/11116 /…

4. @IllegalArgument Я прочитал ответ по ссылке: вы должны различать ионосферную погоду (= мешает солнце!), Как они писали, и что является правдой, и дождь или облачно, как вы написали. Это не ионосферная погода!