谷歌地图 - 位置不断在我的真实位置和 0.6 英里之外(随机地点)之间跳跃

Posted

技术标签:

【中文标题】谷歌地图 - 位置不断在我的真实位置和 0.6 英里之外(随机地点)之间跳跃【英文标题】:Google Maps - Location keeps jumping between my real location and 0.6 miles away (Random place) 【发布时间】:2014-04-12 00:39:50 【问题描述】:

我在我的应用上运行了 Google Maps v2,它使用服务来获取用户的位置。问题是位置不断变化。它会显示我的真实位置一会儿,然后跳转到我以前从未去过的随机位置。

我正在通过该服务检查 GPS/网络纬度/经度,并在我的地图类中调用它们,然后我在其中为相机设置动画以移动到我的位置。我真的不知道出了什么问题,也不知道从哪里开始。

有人知道这是什么问题吗?这让我感到莫名其妙。

我真的不知道要发布什么代码。通过网络定位的准确度为 1121m,而通过 GPS 定位的准确度约为 31。我使用的是LocationListener,在onLocationChanged 中说它正在使用我的网络位置,突然准确度提高了,到29m,然后突然回到1121m。这大约每分钟左右发生一次。非常奇怪的行为。启用 GPS 后,这不应该是首选吗?修复后有没有办法将其设置为我的首选?

我的服务获取如下信息:

public Location getLocation() 
    Log.i("getLocation", "Get location called");
    try 
        locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);

        //Getting GPS status
        isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        //Getting network status
        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGPSEnabled && !isNetworkEnabled) 
            // no network provider is enabled and GPS is off.
            Log.d("NOT ENABLED", "PASSIVE PROVIDER");
            locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
            loc = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
            if (loc != null) 
                latitude = loc.getLatitude();
                longitude = loc.getLongitude();
                Log.i("PASSIVE_LOCATION", "Location: "+loc.toString());
            
        
        else 
            this.canGetLocation = true;
            if (isNetworkEnabled) 
                Log.d("Network", "Network");
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
                loc = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if (loc != null) 
                    latitude = loc.getLatitude();
                    longitude = loc.getLongitude();
                    Log.i("NETWORK_LOCATION", "Location: "+loc.toString());
                
            
            if (isGPSEnabled) 
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("GPS Enabled", "GPS Enabled");
                loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                if (loc != null) 
                    latitude = loc.getLatitude();
                    longitude = loc.getLongitude();
                    Log.i("GPS_LOCATION", "Location: "+loc.toString());
                
            
        
    
    catch (Exception e) 
        e.printStackTrace();
    

    //check provider & accuracy
    Log.d("PROVIDER", loc.getProvider());
    Log.d("ACCURACY", Float.toString(loc.getAccuracy()));
    return loc;

如果有人能提供帮助,我将不胜感激。提前谢谢你。

【问题讨论】:

【参考方案1】:

我认为这自己解决了。它只是因为准确性而在位置之间跳跃。一旦 GPS 精度优于网络,它就开始通过 GPS 进行更新。

一旦onLocationChanged 中的准确度低于 30,我也会停止位置更新,这样我就有了更多的控制权,并且不会浪费用户的电池。

【讨论】:

你能告诉我们如何检查准确性吗? 嗨!请查看我的代码以解决同样的问题***.com/questions/47991613/… 您可以从您覆盖的 onLocationChanged 中获得准确度,看起来类似于 public void onLocationChanged(Location location)。您可以看到它带有一个名为 location 的对象,您可以通过调用 location.getAccuracy( ) 使用该对象获得准确度

以上是关于谷歌地图 - 位置不断在我的真实位置和 0.6 英里之外(随机地点)之间跳跃的主要内容,如果未能解决你的问题,请参考以下文章

谷歌地图 api 中心在我的位置上有一个按钮

如何在没有谷歌地图 API 的情况下在我的应用程序中获取经度和纬度?

谷歌地图:任何人都可以帮我在我的代码中设置以下位置吗?

如何在谷歌地图应用程序中从另一个位置显示当前位置?

谷歌地图查找当前位置和附近的地方

在谷歌地图上查找位置