こんにちは
色々書きますが、GPSやロケーション情報については、ド素人でネットを検索してみて自分なりに調べてみた結果なので誤りが有る可能性がかなり高いです。書かれている事を鵜呑みにせずに必要であれば、各自別途確認ください。
以下、ダラダラとGPSで高度ってどうやって取得してるのか?と調べた内容です。書く目的は、出先で高度を補正する方法を考えたのがメインなので、興味がなかったらすっ飛ばして最後の方だけ読んでもらえると十分かなと思います(笑)
前にも少しネタにした事はありますが、いつも使ってるサイコン(Garmin Edge 520J)にはGPSが内蔵されていて、走行データとして位置情報が保存されています。
位置情報はカーナビ等で使われていて、どんなものかご存知の方は多いかなと思います。カーナビを使ってて画面上に高度が出てない物が多いかと思います。私の車についてるカーナビもそうです。ただ、衛生情報を設定機能などから見ると、高度が出てたりするかなと思います。
この事から、なんとなくGPSでは高度も取得できるんだな?と思ってました。
で、サイコンで普通に記録を開始すると、サイコンに表示される高度って、少しおかしいんですよね。私がいつも使ってる荒サイの土手の上でスタートすると普通に-17mとか表示されています。
最初はなんでだよ!と思いました。
調べてみると、GPSでは平面方向の精度はある程度高いようですが、縦(高度)については、精度が平面方向の1.5倍から2倍ぐらい悪い様です。
なんでかな?と調べてみると、GPSシステムって、GPSの衛生からの距離を知る事が出来るシステムの様です。距離は、衛生が電波を送信した時刻と、受信機が受信した時刻の差が電波が届くのにかかった時間で、電波の進む速度は分かっているので、人工衛星からの受信機までの距離が分かるそうです。この事から人工衛星からの距離(球形)が分かります。また地球も1つの円として捉える様で、その2つの円の交差する場所に受信機が有るはず!と言う事の様です。
衛生が1つだと、地球の円との交差点(4点か?)が分かりますが、場所が特定できないので複数の衛生からの距離を算出して、それぞれが交差する場所を調べると分かる様です。人工衛星がある程度多ければ精度が高くなるのは理解できます。
で、元に戻って高度ですが、人工衛星自体の地球との距離が一定の場所にあり、距離が分布しないので、高度に対する位置精度は衛生が広く分布する平面よりは低い様です。なるほどです。
精度が悪くても分かるんじゃ!?と思ったんですけども、私の認識する高度っていうのは、海抜高度です。一般的にもそうかと思います。
で、GPSで分かる高度って、海抜じゃないんだそうです。(^^;
地球の中心からの一定の距離を表現する位置が 「楕円体高」と言うそうで、GPSが認識する高度はこれの様です。
以下のページを見ると分かると思いますが。地球ってかなり凸凹しているそうです。じゃがいもで表現されていますが、ここまでかどうかは分かりませんが、かなり丸くないみたいですね。しかも海面(水面)の高さは、それの下にある岩などの重量で水面の中央部ば盛り上がったりするそうで、太平洋だから全体的に同じでなないそうです。
海抜って、何なの?となりますが、GPSで算出する「楕円体高」+「ジオイド」が海抜となるそうです。で、ジオイドは以下のWikiPediaにかかれていますが、「地球の平均海水面に一致する等ジオポテンシャル面は、地球の重力以外の影響を取り去った場合の全地球を覆う仮想的な海面に一致する。この場合の平均海水面は陸地にまで延長、すなわち、運河やトンネルを掘ってその場所まで海水を導いたとして考える」だそうです。
で、サイコンの高度はこのジオイドのデータがないと算出出来ないはずですが、私の使うGarmin Edge 520Jには地図すら入ってないので、地点ごとのジオイドデータが入ってると思えません。そうすると「楕円体高」と内蔵する気圧計から上手いこと算出しているんだろうなと推測します。気圧自体は、天気にも左右されかなり変動します。正しい高度(標高)が出るわけ無いですよね!
その割には、それっぽい値が出てるのは頑張ってると思います。
が。。同じ位置でも-17mの日もあれば、0mぐらいの日もあります。特に海抜の低い地域に住んでると、正直微妙です。
このあたりは、メーカーも分かってて、場所(緯度経度だと思う)の標高を登録する機能が有って、記録スタートした場所の高度が登録されていると、スタート時にその高度で設定されますので、スタート時の高度を合わせる事が出来ます。
また、直接入力する事も出来ますので、分かってる場所であれば、補正可能です。スタートした後は、この直接入力をしなければ、多分ですが気圧の変化+GPSの情報等から(気圧だけでは?と思ってますが。。)相対的に高度を計測するのかと思います。
で、どのぐら差が有るのか?と疑問に思ったので、先日-17mと表示されていたいつも使ってる荒サイのスタート地点を調べてみました。この場所は高度11mぐらいの場所です。
国土交通省のページにジオイド計算ができる機能があったので実行してみました。約37.5mだそうです。
で、ジオイドは「楕円体高」からの相対高な様なので、GPSで取得でき誤差0の場合の高度は-37.5mぐらいですね。(勘違いしてたらすいません)
で、サイコンが-17mと表示される事(が多い)ので+20mぐらいは気圧計などから補正できているのかな?と思います。割と上手くやってるなと思いました。どうやってるんだろう?
前に自分で使おうと思って作ったツールが有るんですよね。
スマホが有る前提になりますが、出先のスタート地点でこれを使って、自分のいる場所の高度を調べて、サイコンに入力すれば高度誤差を減らす事ができるんじゃ?と思ってます。
で作ったツールは以下のになります。
使い方は、スマホのブラウザで「 標高確認マップ (V3) 」のページを表示します。起動すると現在地を取得するので、ブラウザで位置情報を取得出来る必要があります。許可していれば、送信して良いか聞いてくるので、許可してください。
そうすると、以下のようなページが表示されます。現在地の標高、緯度、経度が表示されます。位置ずれしている場合には、表示した場所をタッチすると、タッチした場所の情報が表示されます。位置情報の送信を拒否した場合には、自分で調べたい場所を探してタッチすれば、位置情報を送信しなくても調べられます。
※位置情報は、スマホ側のブラウザでJavaScriptで処理され、GoogleのAPI経由で送信されますので、サーバ側(私のサーバ)には、位置情報は送信されませんので、私に居場所がバレる?とかは心配しなくても大丈夫です。普通にGoogleMapを使ってるイメージです。
また、特定の場所を調べたい場合には、近くの目安になる場所をページ下部の場所に入力して、検索ボタンを押せば、その場所に移動します。ただし、同じ名前が複数ある場合には、Googleの機能で一番に出た場所に移動する様で、一覧から選択する的な高機能な物は作ってませんので、一意になるようなキーワードを入れてください(^^; ブランク区切りで複数入れても大丈夫そうな感じです。
河口湖駅を検索して見るとこんな感じです。
また、検索ボタンの右側の現在地を押すと、現在位置情報を取得して現在位置の情報が表示されます。
ここで表示された高度をサイコンの高度に設定すると、良いかなと思います。
Garmin Edge 520Jの場合には、記録中に右上のボタン(決定)を押すと、メニューが表示され、そこから入力できます。
と言う感じの物をだいぶ前に作ったのですが、いかがでしょう?
実は、最近GooogleMapの利用が有料化されてまして、月40000回以上APIを使うと有料になるので、1日の上限を設定してあります。超えるとは思えませんが、それを超えると、その日は利用不可になりますので、ご了承ください。(^^;
自分でも暫く使おうと思ってます。
コメント
はっはぁ、私はGPSの表示をそのまま信じていました。
7月に乗鞍に上った時、位ヶ原の小屋で520Jがピッタリそこの標高を示していたでやっぱりGPSは偉大なり、と思っていました。
今回の記事で目から鱗ですよ(^^)
これで精度アップできますね、ありがとうございます(^^)
Kachi//
Kachiさん
コメントありがとうございます。
乗鞍でビッタリたったんですね。
週末のブルベでも合わせるのを忘れたのですが、誤差が50mぐらいでした。
ヒルクライムする時はああ。。少しずれてるな?ぐらいであまり気にならないのですが、自宅が海抜4mぐらいで、河口に向かうと、ずーとマイナス高度で目立つんですよね(笑)
相対的に見ればいいので、言うほど気にしてなかったりしますが、合ってた方が気持ちいいですね。
しげさん こんにちは
勉強されてますね。余り深く考えたことが無く高度(標高)とかは
勉強になりました。
それと補正が出来ると現地までトランポしてそこで調べて直せばかなり
正確にわかるのは良いですね。確認マップ使わせて頂きます。
hooliganさん
コメントありがとうございます。
低高度だと誤差が凄い目立ちますよね。
多分、気圧変化でも変動するので長時間ライドだと誤差が出るのは避けようがなさそうですが、誤差の程度をへらすことは出来るんじゃないあかと思います。
と言いつつ、先日のブルベでセットするのを忘れました(^^;