首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Android获取当前位置问题

Android获取当前位置问题
EN

Stack Overflow用户
提问于 2016-06-19 21:16:12
回答 2查看 1.5K关注 0票数 0

我正面临一个问题,以获得目前的位置在Android。

我使用的是安卓的FusedLocationAPI。但我得到的纬度和经度并不准确。我把凭证贴在谷歌地图上,上面显示的是我的位置,与我准确的位置不同。

我还试图获得位置更新,并验证了Location.getAccuracy()的准确性,在这里,我得到的最小精度是10米。这里我使用精细定位作为许可。因此,我的问题是,我如何才能得到我的准确定位,换句话说,准确性低于5米。

我的密码是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
    }
}
EN

回答 2

Stack Overflow用户

发布于 2016-06-19 22:38:37

我搜索了很多,我找不到任何小于10的精度使用融合定位API。

如果您看到了谷歌IO演示文稿,就会出现一个图表,显示经过多次测试的识别算法的不同优先级对Galaxy的影响。

如果你想获得小于10的精度,那么你可以使用全球定位系统,但它也取决于设备,全球定位系统,WiFi,蜂窝塔,蓝牙等.

如果全球定位系统硬件能够接受瓦斯校正,它可以做得更好,在最坏的情况下大约是760万,最好的情况是1-2m。

票数 1
EN

Stack Overflow用户

发布于 2016-06-20 04:39:14

我怎样才能得到准确的位置,换句话说,精度低于5米?

简短的回答

在使用位置时,重要的是要了解您可能要求一定的精度,但是并不保证在实际的位置更新中获得精确的

通常不能期望获得准确的位置更新(小于5m )。这取决于许多因素,最重要的是设备和物理环境的能力。

冗长的答案

FusedLocationApi在幕后做了很多魔术。除其他外,它还试图找出使用哪些提供商(GPS、WiFi、蜂窝塔、蓝牙等)。这些供应商在准确性、更新频率和电池损耗方面各有优缺点。然后,它融合来自不同提供者的信息,从而获得名称。

示例1:如果您在纽约市的一个城市峡谷,您将有一个非常困难的时间来获得一个良好和准确的定位系统。另一方面,将有大量的WiFi网络,这些网络已经被谷歌映射和地理定位。所以你可能会得到一个快速的定位修复。精度将取决于WiFi网络的密度,更重要的是取决于墙/建筑物的密度。我不想在这里得到比15-30米更精确的东西。

示例2:如果你在沙漠中的某个地方,情况正好相反。最有可能的是,附近不会有任何WiFi网络,但你会得到一个清晰的全球定位系统修复。在这里,您可以期望位置更新的准确性< 5m。

你的设置看起来是正确的。选择高更新率和高优先级将确保GPS被用作提供者(如果在设备上可用的话)。确保你在外面测试你的应用程序,清晰地看到天空。如果你一直收到非常遥远的位置,用另一个设备进行测试。如果它仍然不能工作,那么您的代码就有问题了。您可能希望使用一个实用工具类,如LocationAssistant (完全公开:我是该项目的作者),以确保正确设置所有内容。

误解

最后,我想澄清我在其他评论中看到的两个常见的误解:

  • 如文档中所述,Location.getAccuracy()将返回估计的位置读数的精度。这是一个最好的猜测(通常基于高斯误差模型),这可能是遥远的。我已经看到了一些情况,在这种情况下,融合定位声称3m的准确性,而且它确实比100m off更准确。因此,不要依赖它的关键功能。
  • ACCESS_FINE_LOCATION权限完全足以获得高精度的更新。没有必要额外指定 ACCESS_COARSE_LOCATION
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37915023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文