7

你好

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

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);  

然后我用

public void onLocationChanged(Location location) {

方法来读取我当前位置的高度。

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

这真的如何工作???

4

5 回答 5

25

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

根据我自己的经验,GPS 在高度值方面确实很差。

我在GPS 状态常见问题解答中阅读了此内容:

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

于 2010-05-09T08:05:09.917 回答
6

旧帖子,我想,但有人可能仍然感兴趣。在听 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();
        }
    } 
}
于 2013-06-06T13:10:22.993 回答
1

我假设您的办公桌位于建筑物内。如果您在建筑物中获得 GPS 定位,您不应该期望精度非常高。是否必须尝试通过调用 getAccuracy() 来获得修复的准确性?

于 2010-05-09T07:30:17.453 回答
1

Gps 只是测量从几颗卫星发送一个已知信号的时间。您的 Gps 接收器中的卫星越多,您相对于这些卫星的位置就越准确。虽然系统容易出现一些误差 - 背景噪声(卫星信号相对较弱,空间相对嘈杂),接收器中的低精度时间片段,GDOP:精度的几何稀释(所有卫星都集中在天空的一个角落),由于电离层高度变化导致的信号折射 - 总体而言,它在确定您与卫星的距离时非常准确。在几何上,您至少需要 3 颗卫星才能获得位置,而第 4 颗卫星才能获得高度。更多的卫星有助于提高准确性和一些更复杂的接收器(不是我们的手机,而是特别是航空应用) RAIM:

高度对于 gps 系统来说是有问题的,因为地球不会以数学常数弯曲。因此,虽然系统知道您相对于卫星的位置,但它现在必须将其覆盖在地球的数学模型上。在航空领域,更准确的 Gps 接收器必须具有高度补充气压计,并且在某些接收器中,由于已知的测量点比较(WAAS 和 LAAS)而增强了位置。

于 2014-05-14T14:26:33.513 回答
0

这发生在您使用 LocationManager.NETWORK_PROVIDER 之类的位置提供程序时,请确保您使用 LocationManager.GPS_PROVIDER 就像您最喜欢的 Gps 提供程序一样。

于 2016-10-10T20:28:36.793 回答