4

如何从 GPS LocationManager获取HDOP 或 VDOP 值?

4

5 回答 5

8

GPS_Location:

double lo=gps_loc.getLongitude();
double la=gps_loc.getLatitude();

水平精度:

int horiAcc=(int)(gps_loc.getAccuracy());

HDOP:

int hd= (int) (horiAcc/5);
于 2012-09-04T06:42:42.100 回答
2

要获取 HDOP、VDOP、PDOP、DGPSID 和 AGEOFDGPSDATA 使用GpsStatus.NmeaListener并实现onNmeaReceived()

protected String latestHdop;
protected String latestPdop;
protected String latestVdop;
protected String geoIdHeight;
protected String ageOfDgpsData;
protected String dgpsId;


@Override
public void onNmeaReceived(long timestamp, String nmeaSentence) {
    loggingService.OnNmeaSentence(timestamp, nmeaSentence);

    if(Utilities.IsNullOrEmpty(nmeaSentence)){
        return;
    }

    String[] nmeaParts = nmeaSentence.split(",");

    if (nmeaParts[0].equalsIgnoreCase("$GPGSA")) {

        if (nmeaParts.length > 15 && !Utilities.IsNullOrEmpty(nmeaParts[15])) {
            this.latestPdop = nmeaParts[15];
        }

        if (nmeaParts.length > 16 &&!Utilities.IsNullOrEmpty(nmeaParts[16])) {
            this.latestHdop = nmeaParts[16];
        }

        if (nmeaParts.length > 17 &&!Utilities.IsNullOrEmpty(nmeaParts[17]) && !nmeaParts[17].startsWith("*")) {

            this.latestVdop = nmeaParts[17].split("\\*")[0];
        }
    }


    if (nmeaParts[0].equalsIgnoreCase("$GPGGA")) {
        if (nmeaParts.length > 8 &&!Utilities.IsNullOrEmpty(nmeaParts[8])) {
            this.latestHdop = nmeaParts[8];
        }

        if (nmeaParts.length > 11 &&!Utilities.IsNullOrEmpty(nmeaParts[11])) {
            this.geoIdHeight = nmeaParts[11];
        }

        if (nmeaParts.length > 13 &&!Utilities.IsNullOrEmpty(nmeaParts[13])) {
            this.ageOfDgpsData = nmeaParts[13];
        }

        if (nmeaParts.length > 14 &&!Utilities.IsNullOrEmpty(nmeaParts[14]) && !nmeaParts[14].startsWith("*")) {
            this.dgpsId = nmeaParts[14].split("\\*")[0];
        }
    }
}

Lightweight GPS Logging Application For Android中找到实现

于 2015-05-29T11:53:01.627 回答
2

您可以从 GpsStatus 对象中的 GpsSatellite 对象中获得 DOP 值的粗略估计(技术上它是原始值)。这使得您无需解析 NMEA 字符串,您不仅可以获得 H(水平)、V(垂直)和 P(位置)DOP;您还可以获得 N(orth)、E(ast)、T(ime) 和 G(eometric) DOP。

对于每个 GpsSatellite 对象,您需要获取仰角、方位角、usedInFix 和 snr。首先过滤掉所有的卫星,只保留snr>0和usedInFix==true的卫星。

为每个卫星创建一个矩阵,其中每个卫星代表矩阵中的一行(表示为双精度数组)以创建我们将调用的矩阵A

注意:要使其正常工作,您至少需要 4 颗卫星

el = 以弧度表示的高程

az=方位角,单位为弧度

Sv=GpsSatellite 的集合

A[n]={sin(Sv[n].az)*cos(Sv[n].el), cos(Sv[n].az)*cos(Sv[n].el), sin(Sv[ n].el), 1d}

有趣的部分来了

DOP矩阵方程如下

At = 转置矩阵 A

(At*A)^-1 = 逆(转置(A).times(A)) =

EDOP^2 xxx
  x NDOP^2 xx
  xx VDOP^2 x
  xxx TDOP^2

明显的 DOP:

EDOP = sqrt(EDOP^2)

NDOP = sqrt(NDOP^2)

VDOP = sqrt(VDOP^2)

TDOP = sqrt(TDOP^2)

派生的 DOP:

GDOP = sqrt(EDOP^2+NDOP^2+VDOP^2+TDOP^2)

HDOP = sqrt(EDOP^2+NDOP^2)

PDOP = sqrt(EDOP^2+NDOP^2+VDOP^2)

于 2016-07-25T15:43:39.647 回答
1

精度通常是指位置类中 GPS 的 HDOP。但是,如果您想要两者,您可以尝试使用 NmeaListener获取原始 NMEA 字符串并对其进行解析以获取 HDOP 和 VDOP。

于 2011-08-09T08:42:22.560 回答
1

您需要注册一个NMEAListener并尝试解析GSA句子(包含 HDOP、VDOP 和 PDOP)或GGA句子(包含用于修复的 HDOP)。

有关详细信息,请参阅 NMEA 0183 标准。

于 2012-02-20T10:41:27.947 回答