如何从GPS LocationManager获取HDOP or VDOP values?
答案 0 :(得分:7)
GPS_Location:
double lo=gps_loc.getLongitude();
double la=gps_loc.getLatitude();
Horizontal_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];
}
}
}
中找到实施方案
答案 2 :(得分:2)
您可以从GpsStatus对象中的GpsSatellite对象获得DOP值的粗略估计(从技术上讲,它是原始值)。这使得你不需要解析NMEA字符串,你不仅可以得到H(orizontal),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标准。