我正在测试一个记录位置的Android应用程序(lat / long / alt)。我在运行Android 2.2.1的三星GTS5830手机上运行应用程序
我在这里和那里读到GPS高度通常不正确,因为地球不是完美的球形。例如,在我的位置,the geoid's height是52米。
我的理解是,这个高度将从“纯”GPS高度中减去。这对我的位置有意义:
- altitude from GPS phone: 535 m
- geoid altitude: 52 m
- altitude from phone's GPS minus geoid height: 482m
- correct atlitude: 478 m
482足够接近我在远足时追踪高度的真实情况
以下是我用来获取GPS坐标的代码:
public class HelloAndroid extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d("main", "onCreate");
setupGps();
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
LocationListener locationListener;
LocationManager lm;
void setupGps() {
Log.d("gps", "Setting up GPS...");
locationListener = new MyLocationListener();
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 20000, 5,
locationListener);
Log.d("gps",
"GPS supports altitude: "
+ lm.getProvider(LocationManager.GPS_PROVIDER)
.supportsAltitude());
Log.d("gps", "Finished setting up GPS.");
}
static class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
Log.d("gps", "long: " + location.getLongitude() + ", lat: "
+ location.getLatitude() + ", alt: "
+ location.getAltitude());
}
}
}
答案 0 :(得分:6)
你所有三个问题的答案都是肯定的。
从GPS获得的高度是WGS84椭球的高度,以米为单位,是地球表面的近似值。我知道,因为我一直在开发使用它的Android软件。
必须进行修正以将数字转换为高于平均海平面或高度的高度,如通常所知。请注意,这可能与设置为平均海平面当前压力的高度计报告的海拔高度不同,因为高度计实际测量气压,但气压不仅仅是高度的函数;它也是空气密度和温度的函数,因此高度计显示近似值。 GPS无法看到这种效果。
2008年地球引力模型(EGM2008)将平均海平面的差异与椭圆体作为经度和纬度的函数进行映射。详情如下:
http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008/egm08_wgs84.html
还可以使用名为EGM96的较少数据的不太准确的模型。谷歌这些都可以更好地理解这些。
答案 1 :(得分:5)
这并不是那么简单 - Android API
已经改变或有错误。我有两个Android设备 - 一个'通用'手机(Android 2.3.6
)和一个Nexus 7
(Android 4.x
)。
在电话上,getAltitude()
会给出与我的实际海拔AMSL
一致的答案(即已更正为geoid
)。在Nexus 7
上,返回的高度未经校正。 API
的文档未指定返回的文档 - 因此在某种意义上两者都是“正确的”。
两个设备似乎都有不错的GPS modules
- $GPGGA NMEA
消息显示正确的高架和大地水准面校正。所以看起来好像必须自己解析消息以获得正确的高度,而getAltitude()
方法是不值得信任的。
答案 2 :(得分:4)
高度错误可能不会降至GPS和大地水准面高度分离。
任何GPS接收器返回的高度值始终是最不准确的值。我经常看到我的办公楼报告说它在-200到+750米的高度移动。一个根本原因是不可能在高度方向上获得均匀的卫星传播;它们总是在你的上方,如果在低海拔处有天空遮挡,它们将位于你上方的圆锥中。在X和Y方向上,假设天空视野良好,将始终是左右传播的卫星;在接收器的前面和后面。这种扩展提高了定位解决方案的准确性。