携帯のGPS精度の計算

携帯のGPS精度の計算


GoogleMap Apiを使って緯度、経度を調べてみると、それぞれ
35.********, 139.********
というように、小数点以下第八位まで出てる

この数字、何m動いたら、一番小さい桁が動くのかと思って計算した。

計算

地球が完全な球だとしておく。
地球の半径Rが R = 6,378,137m だとすると、大円の円周は2π・6378137m。

緯度

緯度は簡単。緯度が増える、減るというのは、赤道を起点に緯度90度、-90度で北極、南極まで動く。

まず、一度あたりのメートルを出す。緯度が南極から北極までの180度で半周しているので、一度あたりを出すには
円周 2πR = 40075016.6856m

を360度で割ると、一度あたりのメートルは
2π*R / 360 = 111319.490793m/度

次に、小数点以下。例えば、小数点第一位は、1度を10刻みにしているので、緯度が0.1度動くと、
11131.936862m/0.1度

同様にして、小数点以下第八位では、
0.0011131.9368625m/0.00000001度 = 1mm/0.000000001度

すなわち、1mm動かすと、GPSの数字が変わって感知されることになる。

経度

経度は少し面倒くさい。同じ経度1度でも、緯度0度の赤道ではメートルの変化が大きいが、北極や南極では、全く動かない。
東京を含む緯度35度の半径 r は, 地球半径を R として、 

r = R cos(35 * π/180) = 5224663.96231m

試しに35を0に置き換えると赤道半径r = R, ±90とすると、r = 0になる

円周は
2πr = 32827531.8429m 

1度あたりの距離は
2πr/360 = 91187.5884525m/度

0.00000001度あたりの距離は
0.00091187.5884525/0.00000001度 = 0.9mm/0.00000001度
すなわち、0.9m動かすと、GPSの数字が変わって感知されることになる。

誤差

GPS誤差がいくらかなのか、よくわからない。小数点以下第八位まで、果たして本当に信用していいのだろうか。系統誤差や統計誤差をさっぴいても小数点以下第八位までは不変なのか。
Location.toString()によれば(LatLngと違って小数点6位までしか出ない。伏せておいた)、

Location[gps 35.******,139.****** acc=7 et=+23h47m11s879ms alt=149.0 vel=1.3822083 bear=257.2 {Bundle[mParcelledData.dataSize=44]}]

のような情報が入っているが、それぞれが意味しているものが未だよくわかってない。

Source Code


                LocationManager service = (LocationManager) this.getSystemService(this.LOCATION_SERVICE);
                Criteria criteria = new Criteria();
                String provider = service.getBestProvider(criteria, false);
                Location location = service.getLastKnownLocation(provider);
                LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
                Log.i("latLng", String.valueOf(latLng.latitude) + " " + String.valueOf(latLng.longitude));


参考文献



コメント