-1

我正在使用 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();
}

如何获得垂直精度

提前致谢

4

3 回答 3

2

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

于 2013-05-30T22:04:55.643 回答
1

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

于 2016-07-14T11:15:47.287 回答
1

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

@Override
@RequiresApi(Build.VERSION_CODES.O)
public void onLocationChanged(Location location) {
    float accuracy = location.getVerticalAccuracyMeters();
}
于 2020-03-11T10:31:20.747 回答