GPS : してログ

Android や iOS の GPS アプリで高度(Altitude)が表示されるものがありますが、アプリによって高度の数値が違う場合があります。 実際の海抜より数十メートルほど大きい値を示しているアプリは、GPS の生の高度を表示しています。 GPS が出す高度値は、地球の形を近似した楕円体(WGS84楕円体)からの高さ(楕円体高)を表していて、日本付近では約40mほどずれた値になります。 これを標高に直すには、その地点に応じたジオイド高を減算してあげる必要があります。 このジオイド高は、衛星などによる観測によって得られた値で、その地点ごとに違うことになります。 専門的なアプリで無い限り、このジオイド高による補正が行われていないため、先のようなずれが生じます。

いくつかインストールした限りでは、下記のアプリケーションでジオイド高による補正がされているようです。

  • GPS Test(Android)
    このアプリは、設定の中に「Adjust altitude」という項目があり、ジオイド高による補正をオン・オフできます。実際に、どのくらい差があるのか確かめることができます。
  • My Altitude(iOS)
    デバイスのセンサー値(Device Sensor)とダウンロードした NOAA の標高データ(Data File)から、現在地の標高を表示できます。ただし、センサー値を補正した表示は行えないようです。
  • Commander Compass Lite(iOS)
    特に説明は無いのですが、右上の3行目が標高を表しているようです。
    センサー値っぽいので削除

GeolocationAPI で検索して出てくるサンプルで多いのが、getCurrentPosition を使った一発取得のものです。しかし、実際これで構築してみると位置情報の精度が悪く(特に Android 系は)使い物になりません。これは、初回に返してくる位置情報の精度が悪いためのようで、enableHighAccuracy を true に指定してもあまり改善しないようです。

実際に GeolocationAPI を使ってアプリケーションを構築する際は、watchPosition を使って緯度経度の取得を繰り返し、精度が落ち着くのを待ってから利用するようにするのが良いです。何を以て落ち着いたと判断するかは悩むところですが、「十分な精度になったらボタンを押して下さい」などとサイト利用者に委ねるか、緯度経度の誤差が 10m を下回ったときに自動投稿する、あるいは5回目の取得時の緯度経度を採用するなどが考えられます。

解説サイトはたくさんありますが、マニュアル的なものしかなく、実装する際は注意が必要です。

  • getCurrentPosition が返す位置情報は精度が悪いことが多い
  • enableHighAccuracy は効いているかあやしい
実装例:watchPosition
GeolocationAPI watchPosition サンプル(Googleマップ版)