スマホ(android)のGPS誤差
アプリ開発でGPSを用いるのでandroid端末を使ってGPSから緯度経度、高度の測定を行ったのですが、水平、垂直ともに精度が平均50mずれます。
開発といっても個人で作っているだけです。
高精度モードというものがあるのでそれを用いた結果となります。GPSのみの計測であると3000mずれることもあります。
誤差を修正しようと思い
1mあたり緯度 : 0.000008983148616 1mあたり経度:0.000010966382364を得られた精度に掛け算し端末のデバイスの座標から引き算を行ったのですが、これはおそらくダメです(理由は後述)
誤差修正のよい方法はありますか?
androidの高精度モードに詳しい方のみで結構ですが、高精度モードでは高度がとれない理由を教えてください。
------------------------------------------------------------------------------------------------------------------------
計測にはUnityというソフトでC#のプログラムを用いています。
using UnityEngine;
using System.Collections;
public class TestLocationService : MonoBehaviour
{
IEnumerator Start()
{
// First, check if user has location service enabled
if (!Input.location.isEnabledByUser)
yield break;
// Start service before querying location
Input.location.Start();
// Wait until service initializes
int maxWait = 20;
while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
{
yield return new WaitForSeconds(1);
maxWait--;
}
// Service didn't initialize in 20 seconds
if (maxWait < 1)
{
print("Timed out");
yield break;
}
// Connection has failed
if (Input.location.status == LocationServiceStatus.Failed)
{
print("Unable to determine device location");
yield break;
}
else
{
// Access granted and location value could be retrieved
print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp);
}
// Stop service if there is no need to query location updates continuously
Input.location.Stop();
}
}
------------------------------------------------------------------------------------------------------------------------
Input.location.lastData.latitude:緯度
Input.location.lastData.longitude:経度
Input.location.lastData.altitude:高度
Input.location.lastData.horizontalAccuracy :水平方向精度
先ほど述べた誤差修正方法ですが、horizontalAccuracyが50mのときhorizontalAccuracy * 0.000008983148616 , horizontalAccuracy * 0.000010966382364を求め現在地から減算しているのですが、現在地すらずれているのでおそらくこの方法はダメです