Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 谷歌地图显示错误的位置_Android_Gps_Location - Fatal编程技术网

Android 谷歌地图显示错误的位置

Android 谷歌地图显示错误的位置,android,gps,location,Android,Gps,Location,我正在尝试做一个跟踪应用程序 问题是,我从gps locationlistner获得的位置是正确的,但谷歌地图上显示的位置至少错了20米。 如下图所示,10秒后从第一个已知位置到更新位置绘制红线。所以说得很清楚,我在10秒后找到了一个几乎完美的位置,但蓝色图标仍然没有改变。注意,它已缩放到最大值 代码: GPS的精度取决于多种因素,如: 向传感器发送数据的卫星数量越多越好 GPS芯片有多强大手持设备没有那么强大。 天气晴朗 建筑物内部等障碍物。 你的地理位置 正如你提到的至少20米,我想离这里

我正在尝试做一个跟踪应用程序

问题是,我从gps locationlistner获得的位置是正确的,但谷歌地图上显示的位置至少错了20米。 如下图所示,10秒后从第一个已知位置到更新位置绘制红线。所以说得很清楚,我在10秒后找到了一个几乎完美的位置,但蓝色图标仍然没有改变。注意,它已缩放到最大值

代码:


GPS的精度取决于多种因素,如:

向传感器发送数据的卫星数量越多越好 GPS芯片有多强大手持设备没有那么强大。 天气晴朗 建筑物内部等障碍物。 你的地理位置
正如你提到的至少20米,我想离这里不远了。在我的应用程序中,我看到gps传感器在阴雨天被关闭了超过3公里。通常,精度在50米以内。您可以使用谷歌地图应用程序来检查您和谷歌应用程序之间的相对准确性。

蓝点不一定与您通过位置侦听器获得的坐标完全匹配。 蓝点是经过过滤的,这样可以避免不现实的跳跃。 当你不动的时候,这种跳跃可能会发生

很可能你正坐在一座大楼里或被高楼包围着。 如果你沿着街道移动,圆点将更新以匹配坐标。 此外,没有人告诉我们谷歌地图中的街道总是在正确的位置。 向谷歌TomTom和Navteq提供地图的地图公司表示,城市内的准确度在500万以内,农村地区为2000万

然而,在你的情况下,正如上面所说,我认为这是一个蓝点过滤。在ios上,如果你开车,蓝点甚至可以推断未来


当你在室外时,城市中的准确度偏差可以达到30米左右,如果你在靠近窗户的建筑物内,偏移量可能超过60米。

但是听众收集的GPS位置是正确的,非常准确。是蓝点没有放在我从GPS监听器得到的位置上。-1:3。错误:GPS不依赖于雨天或晴天,而是取决于你的观点5:自由观察天空,1:部分正确,它更多的是与卫星的角度,而不是唯一的数字。2:是要简单;3km偏移可能会发生,但极为罕见,在大多数情况下,原因是应用程序获得了基站定位固定,并且无法区分GPS或基站接收到的固定/wlan@AlexWien请看这个答案@IllegalArgument我已经阅读了链接中的答案:你必须区分电离层wheather=太阳干扰!,就像他们写的,哪一个是真的,下雨还是多云,就像你写的。那不是电离层惠瑟!我的坏朋友,投了赞成票
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);
        }
    };
}