6

我正在测试一个记录位置 (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 足够接近真实的东西,让我在远足时跟踪海拔高度

  1. GPS高度减去大地水准面高度的上述公式是否正确?
  2. 我是否正确假设在返回 GPS 高度时 android 没有考虑大地水准面的高度?
  3. 如果上述情况属实,是否适用于所有版本的 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());
        }
    }
}
4

3 回答 3

7

你所有三个问题的答案都是肯定的。

从 GPS 获得的高度是 WGS84 椭球上方的高度(以米为单位),这是地球表面的近似值。我知道这一点,因为我一直在开发 Android 软件来使用它。

必须应用校正将数字转换为平均海平面以上的高度,或通常已知的高度。请注意,这可能与设置为平均海平面当前压力的高度计报告的高度不同,因为高度计实际上测量的是气压,但气压不仅仅是高度的函数;它也是空气密度和温度的函数,因此高度计显示的是近似值。GPS 看不到这种效果。

地球引力模型 2008 (EGM2008) 将平均海平面的差异与椭球映射为经度和纬度的函数。详情在这里:

http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008/egm08_wgs84.html

还可以使用一种使用较少数据的不太准确的模型,称为 EGM96。谷歌这两个以更好地理解这些。

于 2012-07-16T12:05:52.920 回答
5

这不是那么简单——Android API要么发生了变化,要么有错误。我有两部 Android 设备——一部“通用”手机 ( Android 2.3.6) 和一部Nexus 7( Android 4.x)。

在电话中,getAltitude()给出与我的实际高度一致的答案AMSL(即,修正为geoid)。在 上Nexus 7,返回的高度未校正。的文档API没有指定返回哪个 - 所以在某种意义上两者都是“正确的”。

两种设备似乎都不错GPS modules——$GPGGA NMEA消息显示了正确的高度和大地水准面校正。所以看起来好像必须自己解析消息才能得到正确的高度,这种getAltitude()方法是不可信的。

于 2012-10-08T15:16:36.150 回答
4

高度误差很可能不归咎于 GPS 和大地水准面高度分离。

任何 GPS 接收器返回的高度值始终是最不准确的值。我经常看到我的办公楼报告说它的高度在 -200 到 +750 米之间移动。一个根本原因是不可能在高度方向上均匀分布卫星。它们将始终在您上方,如果在低海拔地区有任何遮蔽天空,它们将位于您上方的锥形中。在 X 和 Y 方向上,假设天空视野良好,总会有左右散布的卫星;在接收器的前面和后面。这种扩展提高了位置解决方案的准确性。

于 2012-06-25T07:29:13.227 回答