谷歌地图显示错误的位置

时间:2014-06-25 09:46:25

标签: android gps location

我正在尝试制作跟踪应用程序。

问题是我从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);
        }
    };
}

2 个答案:

答案 0 :(得分:0)

GPS的准确性取决于多种因素,如:

  1. 向传感器发送数据的卫星数量(越多越好)
  2. GPS芯片有多强大(手持设备不那么强大)。
  3. 天气状况(晴空)
  4. 建筑物内部等障碍
  5. 您的地理位置
  6. 正如你提到至少20米,我认为它并不是那么遥远。在我的应用程序中,我看到gps传感器在多云的阴雨天被关闭超过3公里。通常,精度在50米以内。您可以使用谷歌地图应用程序检查您和谷歌的应用程序之间的相对准确性。

答案 1 :(得分:0)

蓝点不一定完全匹配位置监听器获得的坐标。 过滤蓝点,以避免不切实际的跳跃。 当你不动时,就会发生这种跳跃。

您可能坐在建筑物内或高层建筑物周围 如果您移动(沿着街道行走),点将更新以匹配坐标 更进一步没有人告诉谷歌地图上的街道总是在正确的位置 向谷歌(TomTom和Navteq)提供地图的地图公司表示,城市内的准确度在5米以内,而在农村地区则为20米。

然而在你的情况下,我认为 - 如上所述 - 它是对蓝点的过滤。 (在ios上,如果你开车的话,蓝点甚至可以推断出未来。)

当你在外面时,城市的精确度偏差可达到约30米,如果你在靠近窗户的建筑物内,偏移可能超过60米。