Android GPS位置的getAltitude()如何工作

Rof*_*ion 7 wgs84 gps android locationmanager

您好

我试图实现一个简单的GPS跟踪器.因此被使用

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);  
Run Code Online (Sandbox Code Playgroud)

然后我用了

public void onLocationChanged(Location location) {
Run Code Online (Sandbox Code Playgroud)

读取当前位置高度的方法.

但我真的不知道Location.getAltitude()返回什么.该文件说它返回了海拔高度.但这是米吗?还是脚?如果我把手机放在我旁边的桌子上,这个值会在500到-500之间变化吗?

这真的有用吗???

Jon*_*nas 24

您获得的海拔高度值是以gps(WGS84) 参考椭球为单位,而不是大地水准面.

根据我自己的经验,GPS在高度值方面非常糟糕.

我在GPS状态常见问题解答中看到了这个:

GPS不会报告高于平均海平面的高度,而是GPS系统将高度与WGS84参考椭球进行比较,该椭圆可能高于或低于实际海平面.在地球的不同地区,它可以超过200米(取决于地球的质量分布).例如,佛罗里达州大地水准面的表面高出平均海平面30-40米,这意味着站在岸边将显示-30米的高度.这是正常的,而不是错误,并且由高度相对于人造参考表面而不是海平面的事实引起.如果您对此主题感兴趣,我建议您阅读平均海平面,GPS和大地水准面.


ede*_*ero 5

老帖子,我rekon,但有人可能仍然感兴趣.在听GPS时,您可以解析NMEA GPGGA句子(http://aprs.gids.nl/nmea/#gga),其中有大地水准面高度(WGS84椭圆体上方的大地水准面高度).只需从getAltitude返回的值中减去这个高度,即可获得更准确的高程值.

使用几个月后进行编辑,并从我的应用用户收到反馈

更好的解决方案是直接获取GPGGA句子中的高程值:

double GGA_ALTITUDE = 0d;
private static final String NMEA_GGA = "$GPGGA";    
private static final int altitude_element_id = 9;

@Override
public void onNmeaReceived(long timestamp, String nmea) {
    foundSats = true;
    // check that this is an RMC string
    if (nmea.startsWith(NMEA_GGA)) {
        String[] tokens = nmea.split(",");
        try {
            // get orthometric elevation
            String elevation = tokens[altitude_element_id];             
            if (!elevation.equals("")) {
                Log.d("NMEA", "ortho elev: " + ortho);
                GGA_ALTITUDE = Double.parseDouble(elevation);                   
            }
        } catch (Exception ex) {
            Log.e("NMEA", "onNmeaReceived: "
                    + ex.getMessage());

            onNmeaException(ex.getMessage());               
            ex.printStackTrace();
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)