2014-06-25 4 views
2

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

Проблема в том, что местоположение, которое я получаю от 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); 
     } 
    }; 
} 
+0

Неплохо, сейчас. :) –

ответ

0

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

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

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

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

+0

downvoter: Не могли бы вы прокомментировать нижестоящий? – AlexWien

0

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

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

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

+0

Но местоположение GPS, собранное слушателем, является правильным, очень точным. Это голубая точка, которая не помещается на месте, которое я получаю от слушателя GPS. –

+0

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

+0

@AlexWien см. Этот ответ http: // ГИС.stackexchange.com/questions/11116/does-gps-signal-quality-depend-on-the-chip-manufacturer-does-it-depend-on-weath –

Смежные вопросы