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

时间:2011-08-09 08:26:51

标签: android gps location locationmanager

如何从GPS LocationManager获取HDOP or VDOP values

5 个答案:

答案 0 :(得分:7)

GPS_Location:

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

Horizo​​ntal_Accuracy:

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

HDOP:

int hd= (int) (horiAcc/5);

答案 1 :(得分: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

中找到实施方案

答案 2 :(得分:2)

您可以从GpsStatus对象中的GpsSatellite对象获得DOP值的粗略估计(从技术上讲,它是原始值)。这使得你不需要解析NMEA字符串,你不仅可以得到H(orizo​​ntal),V(ertical)和P(osition)DOP;你也可以得到N(正),E(ast),T(ime)和G(eometric)DOP。

对于每个GpsSatellite对象,您需要获得高程,方位角,usedInFix和snr。 首先过滤掉所有卫星,只保持卫星在snr> 0和usedInFix == true的位置。

对于每个卫星创建一个矩阵,其中每个卫星代表矩阵中的一行(表示为双精度数组)以创建我们称之为 A 的矩阵:

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

el = 弧度的高程

az = 弧度中的方位角

Sv = GpsSatellites的集合

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 = trasnposed Matrix A

(At * A)^ - 1 = inverse(transpose(A).times(A))=

EDOP^2    x      x      x
  x     NDOP^2   x      x
  x       x    VDOP^2   x
  x       x      x    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)

答案 3 :(得分:1)

Accuracy通常是指位置等级的GPS的HDOP。但是如果您想要两者,您可以尝试NmeaListener获取原始NMEA字符串并解析它以获得HDOP和VDOP。

答案 4 :(得分:1)

您需要注册NMEAListener并尝试解析GSA句子(包含HDOP,VDOP和PDOP)或GGA句子(包含HDOP以进行修复)。< / p>

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