Android GPS中的垂直精度

时间:2013-05-30 14:51:46

标签: android gps altitude

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

我如何才能获得垂直准确度

先谢谢

3 个答案:

答案 0 :(得分:3)

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

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

高级解决方案1:找出Android使用的总精度(它可能是误差范围的径向误差,包括纬度,长度和高度)

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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