Android获取当前位置问题
我在安卓系统中获取当前位置时面临一个问题 我正在使用安卓系统。但是我得到的纬度和经度并不准确。我将这些凭证粘贴在谷歌地图上,它显示的是一个与我的准确位置不同的地方 我还尝试获取位置更新,并通过Android获取当前位置问题,android,location,android-gps,android-fusedlocation,Android,Location,Android Gps,Android Fusedlocation,我在安卓系统中获取当前位置时面临一个问题 我正在使用安卓系统。但是我得到的纬度和经度并不准确。我将这些凭证粘贴在谷歌地图上,它显示的是一个与我的准确位置不同的地方 我还尝试获取位置更新,并通过location.getAccurance()验证了精度,这里我得到的最小精度是10米。 这里我使用精细位置作为许可。 所以我的问题是,我怎样才能得到我的准确位置,换句话说,准确度小于5米 我的代码是 GoogleApiClient mGoogleApiClient = new GoogleApiClien
location.getAccurance()
验证了精度,这里我得到的最小精度是10米。
这里我使用精细位置作为许可。
所以我的问题是,我怎样才能得到我的准确位置,换句话说,准确度小于5米
我的代码是
GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.enableAutoManage(this, this)
.build();
LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setSmallestDisplacement(1);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest,MainActivity.this);
@Override
public void onLocationChanged(Location location) {
Toast.makeText(MainActivity.this,";-"+location.getAccuracy(),Toast.LENGTH_LONG).show();
if(location.hasAccuracy() && location.getAccuracy()<lastLocationAccuracy){
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
GoogleApiClient mGoogleApiClient=new GoogleApiClient.Builder(此)
.addConnectionCallbacks(此)
.addOnConnectionFailedListener(此)
.addApi(LocationServices.API)
.enableAutoManage(这个,这个)
.build();
LocationRequest MLLocationRequest=新的LocationRequest();
mLocationRequest.setInterval(以毫秒为单位更新间隔);
mLocationRequest.SetFastTestInterval(最快的更新间隔,以毫秒为单位);
M定位请求。设置最小位移(1);
mLocationRequest.setPriority(位置请求.优先级高精度);
LocationServices.FusedLocationApi.RequestLocationUpdate(mgoogleapClient、mlLocationRequest、MainActivity.this);
@凌驾
已更改位置上的公共无效(位置){
Toast.makeText(MainActivity.this,“;-”+location.getAccurance(),Toast.LENGTH_LONG.show();
如果(location.hasAccurance()&&location.getAccurance()我搜索了很多,但使用fused location API找不到精度低于10的任何东西
如果您看到了演示文稿,将显示一张图表,显示在Galaxy Nexus上多次测试的识别算法的不同优先级的效果
如果你想获得低于10的精度,那么你可以使用GPS,但这也取决于设备、GPS、WiFi、手机发射塔、蓝牙等
如果GPS硬件可以接受校正,它可以做得更好,最坏的情况是7.6米,最好的情况是1-2米。我搜索了很多,使用融合定位API找不到精度低于10的任何东西
如果您看到了演示文稿,将显示一张图表,显示在Galaxy Nexus上多次测试的识别算法的不同优先级的效果
如果你想获得低于10的精度,那么你可以使用GPS,但这也取决于设备、GPS、WiFi、手机发射塔、蓝牙等
如果GPS硬件可以接受校正,它可以做得更好,最坏的情况是7.6米,最好的情况是1-2米
我怎样才能得到我的准确位置,换句话说,准确度小于5米
简短的回答
在使用位置时,重要的是要了解您可能会要求一定的精度,但不能保证在实际位置更新中获得该精度
通常情况下,您无法获得准确度<5m的位置更新。这取决于许多因素,最重要的是您的设备和物理环境的功能。
长话短说
FusedLocationApi在幕后发挥了巨大的魔力。除此之外,它还试图找出要使用的提供商(GPS、WiFi、手机塔、蓝牙等)。这些提供商在准确性、更新频率和电池消耗方面各有优缺点。然后,它会融合来自不同提供商的信息,因此得名
示例1:如果你在纽约市的一个城市峡谷中,你将很难获得一个准确的GPS定位。另一方面,周围将有大量的WiFi网络,这些网络已经被谷歌映射和地理参考。因此,你很可能得到一个快速定位。准确度将取决于巢穴WiFi网络的可靠性,更重要的是墙壁/建筑物的密度。我不希望在这里得到比15-30米更精确的信息
示例2:如果你在沙漠中的某个地方,情况正好相反。很可能,附近不会有任何WiFi网络,但你会得到一个非常清晰的GPS定位。在这里,你可以预期位置更新的精确度<5m
您的设置看起来正确。选择高更新率和高优先级将确保GPS用作提供商(如果设备上可用)。请确保您在户外测试应用程序,并且可以清楚地看到天空。如果您一直接收到非常遥远的位置,请使用其他设备进行测试。如果它仍然无法工作,则说明您的代码有问题。
您可能希望使用一个实用程序类,例如(完全公开:我是该项目的作者),以确保您正确设置了所有内容
误解
最后,我想澄清我在其他评论中看到的两个常见误解:
- 如文档中所述,将返回位置读数的估计精度。这是最佳猜测(通常基于高斯误差模型)这可能很遥远。我见过这样的情况:融合定位的准确度为
3m
,距离实际超过100m
。因此不要依赖它来实现关键功能
ACCESS\u FINE\u LOCATION
权限足以获得高精度更新。无需额外指定ACCESS\u rough\u LOCATION
我怎样才能得到我的准确位置,换句话说,准确度小于5米
简短的回答
在使用位置时,重要的是要了解您可能会要求一定的精度,但不能保证在实际位置更新中获得该精度
通常情况下,您不能期望获得精度<5m的位置更新。这取决于