5 gps android geolocation altitude
我正在测试一个记录位置的Android应用程序(lat/long/alt).我在运行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
Run Code Online (Sandbox Code Playgroud)
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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
你的所有三个问题的答案都是肯定的.
从GPS获得的高度是WGS84椭圆体以上的高度,以米为单位,这是地球表面的近似值.我知道,因为我一直在开发Android软件来使用它.
必须进行修正以将图形转换为高于平均海平面或高度的高度,如通常所知.请注意,这可能与设置为平均海平面当前压力的高度计报告的海拔高度不同,因为高度计实际测量气压,但气压不仅仅是高度的函数; 它也是空气密度和温度的函数,因此高度计显示近似值.GPS无法看到这种效果.
2008年地球引力模型(EGM2008)将平均海平面的差异与椭圆体作为经度和纬度的函数进行映射.细节在这里:
http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008/egm08_wgs84.html
还可以使用名为EGM96的较少数据的不太准确的模型.谷歌这两个都更好地了解这些.
小智 5
它不是那么简单 - Android API已经改变或有错误.我有两个Android设备 - 一个'通用'手机(Android 2.3.6)和一个Nexus 7(Android 4.x).
在电话上,getAltitude()给出与我的实际高度一致的答案AMSL(即,校正geoid).在Nexus 7,返回的高度未经修正.该文档API没有指定返回哪个 - 因此在某种意义上两者都是'正确'.
这两种设备似乎都很不错GPS modules- $GPGGA NMEA消息显示正确的高架和大地水准面校正.因此,看起来好像必须自己解析消息以获得正确的高度,并且该getAltitude()方法是不值得信任的.
| 归档时间: |
|
| 查看次数: |
15224 次 |
| 最近记录: |