Как получить значения HDOP или VDOP из GPS LocationManager? - PullRequest
2 голосов
/ 09 августа 2011

Как получить значения HDOP или VDOP из GPS LocationManager?

Ответы [ 5 ]

7 голосов
/ 04 сентября 2012

GPS_Location:

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

Горизонтальная_Точность:

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

HDOP:

int hd= (int) (horiAcc/5);
2 голосов
/ 25 июля 2016

Вы можете получить приблизительную оценку (технически это необработанное значение) значений DOP от объектов GpsSatell в объекте GpsStatus. Это позволяет вам не анализировать строки NMEA, и вы можете не только получить H (орбитальный), V (вертикальный) и P (опционный) DOP; Вы также можете получить DOP (N (orth), E (ast), T (ime) и G (eometric)).

Для каждого из объектов GpsSatell вы хотите получить высоту, азимут, usedInFix и snr. Сначала отфильтруйте все спутники, оставив только тот спутник, где snr> 0 и usedInFix == true.

Для каждого спутника создайте матрицу, где каждый спутник представляет строку в матрице (представленной в виде массива двойных чисел), чтобы создать матрицу, которую мы назовем A :

Примечание: для правильной работы вам нужно как минимум 4 спутника

el = высота в радианах

az = азимут в радианах

Зв = коллекция спутников Gps

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

самое интересное

Матричное уравнение DOP выглядит следующим образом

At = транспонированная матрица A

(At * A) ^ - 1 = обратный (транспонировать (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)

2 голосов
/ 29 мая 2015

Чтобы получить 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];
        }
    }
}

найти реализацию из Облегченное приложение GPS-регистрации для Android

1 голос
/ 20 февраля 2012

Вам необходимо зарегистрировать NMEAListener и попытаться проанализировать предложение GSA (содержит HDOP, VDOP и PDOP) или предложение GGA (которое содержит HDOP для исправления).

См.для стандарта NMEA 0183 для получения дополнительной информации.

1 голос
/ 09 августа 2011

Точность обычно относится к HDOP для GPS в классе местоположения. Однако, если вам нужны оба, вы можете попробовать NmeaListener , чтобы получить необработанную строку NMEA и проанализировать ее для получения HDOP и VDOP.

...