【问题标题】:Android getting current location issueAndroid获取当前位置问题
【发布时间】:2016-10-21 06:23:45
【问题描述】:

我在获取 Android 中的当前位置时遇到问题。

我使用的是安卓的FusedLocationAPI。但是我得到的纬度和经度不准确。我将该凭据粘贴到谷歌地图上,它显示的地方与我的准确位置不同。

我还尝试获取位置更新并通过Location.getAccuracy() 验证了准确度,这里我得到的最小准确度是 10 米。 在这里,我使用 Fine Location 作为许可。 所以这里我的问题是,我怎样才能得到我的准确位置,换句话说,精度小于 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();
    }
}

【问题讨论】:

  • 尝试粗略定位
  • 你能添加一些代码吗??
  • 与 Fine Location 相比,这不太准确
  • 建议同时使用两者

标签: android location android-gps android-fusedlocation


【解决方案1】:

我怎样才能获得我的准确位置,即精度小于 5 米?

简短的回答

在处理位置时,请务必了解您可能会要求一定的准确性,但不能保证在实际位置更新中获得该准确性


您通常不能期望以


长答案

FusedLocationApi 在幕后发挥了很多作用。除其他外,它试图找出使用哪些提供商(GPS、WiFi、蜂窝塔、蓝牙等)。这些提供商中的每一个在准确性、更新频率和电池消耗方面都各有利弊。然后它融合了来自不同提供商的信息,因此得名。

示例 1:如果您在纽约市的城市峡谷中,您将很难获得良好且准确的 GPS 定位。另一方面,周围将会有大量的 WiFi 网络,这些网络已经被谷歌映射和地理参考。因此,您可能会获得快速的位置修复。准确性将取决于 WiFi 网络的密度,更重要的是取决于墙壁/建筑物的密度。我不希望在这里得到比 15-30 米更准确的东西。

示例 2:如果您在沙漠的某个地方,情况正好相反。最有可能的是,附近不会有任何 WiFi 网络,但您将获得清晰的 GPS 定位。在这里,您可以期待以

您的设置看起来正确。选择高更新率和高优先级将确保 GPS 用作提供程序(如果在设备上可用)。确保您在室外测试您的应用程序,并且可以清楚地看到天空。如果您不断收到非常遥远的位置,请使用另一台设备进行测试。如果它仍然不起作用,那么您的代码有问题。 您可能想要使用诸如LocationAssistant 之类的实用程序类(完全公开:我是该项目的作者),以确保您正确设置所有内容。

误解

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

  • 如文档中所述,Location.getAccuracy() 将返回位置读数的估计准确度。这是一个最好的猜测(通常基于高斯误差模型),可能还很遥远。我已经看到融合位置声称准确度为3m 的情况,它实际上超过了100m 关闭。所以不要依赖它来实现关键功能。

  • ACCESS_FINE_LOCATION 权限足以获得高精度更新。 无需额外指定ACCESS_COARSE_LOCATION

【讨论】:

    【解决方案2】:

    我搜索了很多,但使用融合位置 API 找不到任何低于 10 的准确度。

    如果您看过Google IO 的演示文稿,则会显示一个图表,显示在 Galaxy Nexus 上多次测试的识别算法的不同优先级的效果。

    如果您想获得低于 10 的准确度,那么您可以使用 GPS,但这也取决于设备、GPS、WiFi、手机信号塔、蓝牙等...

    如果 GPS 硬件可以接收WAAS 校正,它可以做得更好,最坏情况下约为 7.6m,最好情况下为 1-2m。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2011-07-15
      • 2019-12-24
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多