【问题标题】:Vertical Accuracy in android GPSandroid GPS中的垂直精度
【发布时间】:2013-05-30 14:51:46
【问题描述】:

我正在使用 GPS 相关的应用程序。我需要获得垂直精度,但它总是得到修复 11.0000。我需要它像 lat 和 lng 一样动态。我使用了getAccuracy,但它会导致水平精度

@Override
public void onLocationChanged(Location location) {
    if (location != null) {
        lat = location.getLatitude();
        lon = location.getLongitude();
        Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
        address = mailOb.getAddress(geoCoder, lat, lon);

        if (!meterFootFlag) {
            diameter = Math.round(location.getAccuracy()) + " m.";
            altitude = Math.round(location.getAltitude()) + " m.";

        } else {
            diameter = Math.round(location.getAccuracy() * 3.28084) + " ft.";
            altitude = Math.round(location.getAltitude() * 3.28084) + " ft.";
        }

        if (diameter.contains("+"))
            diameter.replace("+", "");
        else if (altitude.contains("+"))
            altitude.replace("+", "");
    } else {
        lat = 0.0;
        lon = 0.0;

        if (!meterFootFlag) {
            altitude = 0.0 + " m.";
            diameter = 0.0 + " m.";

        } else {
            altitude = 0.0 + " ft.";
            diameter = 0.0 + " ft.";
        }
    }
    mlocManager.removeUpdates(MySettings.this);
    pDialog.dismiss();
}

如何获得垂直精度

提前致谢

【问题讨论】:

    标签: android gps altitude


    【解决方案1】:

    Android 不提供垂直精度。
    垂直精度通常比水平精度差 2-3 倍。

    一个简单的解决方案:水平和垂直都使用 androids 精度。

    高级解决方案 1:找出 android 使用什么作为总精度(可能是误差球的径向误差,包括纬度、经度和高度)

    尝试找出一个转换因子,例如取精度并乘以 *2,5

    另一种解决方案,查看 iphone 水平和垂直精度,并与 android 进行比较。找出从 acc 到 vert acc 的平均转换因子。

    解决方案 3:想想为什么需要垂直精度。为什么需要它?

    提示:来自我的 iphone4 的示例:当 iphone 显示 30m hor,我有 57vert,10hor:15-20vert,5 hor:10vert

    【讨论】:

    • 那么在这种情况下有什么替代方案?我可以使用它吗?或者我可以使用除此之外的任何其他东西?
    • @Yug 我的回答有用吗?也考虑投票。
    • @AlexWien 还有其他方法可以找到垂直精度吗??
    【解决方案2】:

    高度精度在很大程度上取决于核心 GPS 精度、使用额外的传感器作为气压计以及使用 wifi/蜂窝网络以及融合算法。它没有一个恒定的比率。如果您真的想获得准确性,您可以尝试以下方法:在静止时检查信号的方差,这并不总是有效,因为某些设备会检测到静止并只是重复上次输出以节省电量。另一种成本较高的方法是参考https://developers.google.com/maps/documentation/elevation/intro 因此,您基本上使用 lat lon 误差进行 lat lon 测量,并检查假设您在开放区域时得到的垂直误差。

    【讨论】:

      【解决方案3】:

      从 API 26 开始,您可以使用 getVerticalAccuracyMeters() 方法

      @Override
      @RequiresApi(Build.VERSION_CODES.O)
      public void onLocationChanged(Location location) {
          float accuracy = location.getVerticalAccuracyMeters();
      }
      

      【讨论】:

      • 欢迎来到 SO。一个实际的代码示例将提高您的答案的质量:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2017-07-10
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2016-10-01
      相关资源
      最近更新 更多