我正在测试一个记录位置 (lat/long/alt) 的 Android 应用程序。我正在运行 Android 2.2.1 的三星 GTS5830 手机上运行该应用程序
我在这里和那里读到 GPS 高度通常是不正确的,因为地球不是完美的球形。例如,在我的位置,大地水准面的高度是 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高度减去大地水准面高度的上述公式是否正确?
- 我是否正确假设在返回 GPS 高度时 android 没有考虑大地水准面的高度?
- 如果上述情况属实,是否适用于所有版本的 Android?
这是我用来获取 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());
}
}
}