由于不包括大地水准面高度,Android的GPS高度是否不正确?

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足够接近真实的东西,让我在徒步旅行时跟踪海拔

  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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

dav*_*tom 6

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

从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()方法是不值得信任的.