GPS LocationManagerからHDOPまたはVDOP値を取得するにはどうすればよいですか?
5 に答える
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);
GpsStatus オブジェクトの GpsSatellite オブジェクトから DOP 値の概算 (技術的には生の値) を取得できます。これにより、NMEA 文字列を解析する必要がなくなり、H(orizontal)、V(ertical)、および P(ositional) DOP を取得できるだけではありません。N(orth)、E(ast)、T(ime)、および G(eometric) DOP を取得することもできます。
GpsSatellite オブジェクトごとに、仰角、方位角、usedInFix、および snr を取得する必要があります。最初にすべてのサテライトを除外し、snr>0 および usedInFix==true のサテライトのみを保持します。
サテライトごとに、各サテライトがマトリックスの行を表すマトリックスを作成し (double の配列として表されます)、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 = 転置行列 A
(At*A)^-1 = inverse(transpose(A).times(A)) =
EDOP^2 xxx xNDOP^2xx xx VDOP^2 x xxxTDOP^2
明らかな DOP:
EDOP = 平方根(EDOP^2)
NDOP = sqrt(NDOP^2)
VDOP = sqrt(VDOP^2)
TDOP = 平方根(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)
精度は通常、ロケーション クラスの GPS の HDOP を指します。ただし、両方が必要な場合は、 NmeaListenerを試して生の NMEA 文字列を取得し、それを解析して HDOP と VDOP を取得できます。
を登録して、文 (HDOP、VDOP、および PDOP を含む) または文 (修正のために HDOP を含む)NMEAListener
を解析する必要があります。GSA
GGA
詳細については、NMEA 0183 規格を参照してください。