你好

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

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

然后我用了

public void onLocationChanged(Location location) {

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

但是我真的不知道哪个位置。getaltitude()返回。该文件说它返回了高度。但这是米吗?还是feets?如果我将手机放在我旁边的桌子上,则此值在500和-500之间会更改?

这是如何真正起作用的???

有帮助吗?

解决方案

您获得的高度价值是从 GPS(WGS84) 参考椭圆形 而不是来自 Geoid.

根据我自己的经验,GPS在高度值中确实很糟糕。

我在 GPS状态 常问问题:

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

其他提示

我的旧帖子,我雷龙,但是有人可能仍然很感兴趣。在听GPS时,您可以解析NMEA GPGGA句子(http://aprs.gids.nl/nmea/#gga),其中有地质高度(wgs84椭圆形上方的地质高度)。只需从恢复的恢复值中减去此heigh,一个,您将具有更准确的高程值。

经过几个月的使用和从我的应用程序的用户收到的反馈后进行编辑

一个更好的解决方案是直接获得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();
        }
    } 
}

我认为您的桌子位于建筑物内。如果您在建筑物中获得GPS修复,则不应指望准确性很高。必须尝试通过调用getAccuracy()来获得修复程序的准确性?

GPS只是测量从几个卫星发送已知信号的时间。鉴于您的GPS接收器,卫星越多,相对于这些卫星,您的位置就越准确。虽然系统容易出现一些错误的背景噪声(卫星信号相对较弱,空间相对嘈杂),但接收器中的精确时间较低,GDOP:几何精度的钻孔(所有卫星都在天空的一个角落),,由于电离层变化而引起的信号的折射 - 总的来说,确定与卫星的距离非常准确。从几何上讲,您至少需要3颗卫星才能获得位置和第四个卫星才能获得高度。更多的卫星有助于更高的准确性,并且在一些更复杂的接收器(不是我们的电话,而是特别是航空应用程序)中,RAIM:接收器自主性完整性监视,以预测在飞机陆地之前的区域和时间的准确性...

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

这发生在您使用locustantmanager.network_provider之类的位置提供商之类的地方,请确保您使用locutionmanager.gps_provider,例如您喜欢的GPS提供商。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top