我正在使用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();
我如何才能获得垂直准确度
先谢谢
答案 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();
}