緯度と経度から2地点間の距離を計算する!

Silicon Valley Super Ware

2020年8月11日


緯度と経度から2地点間の距離を計算する!

GPXファイルでは通常は距離情報は含まれていません。
移動距離を取得するためには、GPSのレコード間の移動距離を 緯度と経度の情報から計算する必要があります。

計算のやり方はいくつかあって、インターネットで 「緯度と経度から距離を計算する」などでGoogle検索すると幾つかの情報が出てきます。

厳密な計算は難しい!

地球自体が完全な球体ではないので、厳密な計算は難しくなります。 良く利用されているのは、地球を回転楕円体と考えて、近似値を計算する方法です。
地球を回転楕円体とみなした場合の楕円体の情報、長径と扁平率は幾つか異なる定義があって、
  • ベッセル楕円体
  • GRS80楕円体
  • WGS84楕円体
などが世界的によく使われています。
いろいろなケースの誤差を最小にしようとすると、計算の方法は複雑になってしまい 「お手軽」に実装するのが難しくなるため、 簡単に実装するためには、表計算などでも使われている近似式「Hubenuyの公式」を 使うと比較的シンプルな式で2地点間の距離を求める事ができます。

近似式なのでそれなりに誤差は大きく、誤差の範囲も一定ではなく、場所によって変わってきます。

今回のWebサービスは正確な距離を求めるのが目的ではないので数百メートルの誤差は十分に許容範囲以内 という前提でこの近似式を採用しています。
考え方としては、ランニングや登山の移動距離を考えた場合、限定的な緯度、経度の範囲の計算になるわけで 「相対的」な距離を考えた場合は、十分正確であるとみなせるという仮定です。
幾つか参考にしたサイトです。
実際に、ランニングや登山でこの近似式で計算した距離を参考にしていますが、 実用上は余り問題ない程度の結果が得られています。

距離の計算を行う場合の注意

一部のデータが抜けたデータがある可能性

データ処理を行う場合は、データがそろっているかを確認する必要があります。

GPXデータの場合位置情報は基本的に抜けないはずですが、 万が一位置情報が正しく読み取れなかった場合、そのレコードを取り除くなどの処理を行います。 こうした処理をすることで、予測外のデータが含まれるのを防ぐことができます。
最初のデータの距離情報は「0」で、2つ目以降は、レコード間の移動距離を計算して追加します。
実際に、勉強が目的の場合、一度、自分で読み込むプログラムを書いてみる事をお勧めします。

誤差の考え方

計算した距離の誤差ですが、実はGPSの緯度・経度にも誤差は当然出てきます。 実際の移動した緯度・経度を地図と重ねると道から外れる場合が結構ある事からも GPSの計測データには意外に大きな誤差が含まれています。
ただし、この誤差は距離を計算する場合は余り問題ではなく、 実際の移動した場所から、平行移動するようになっている場合が多く、 2点間の距離で考えると余り問題にならない場合が殆どです。
さらに、「Hubenyの公式」による計算は大きく離れた2地点間の計算をする場合誤差が 大きくなりますが、移動距離が余り大きくない場合、その誤差も比較的小さく 計測間隔をある程度短くできれば、意外に正確な距離の算出はできるようです。
経験的にも5~10㎞移動した時の誤差はせいぜい数百メートル以内に収まるようです。
ハイキングやランニングで10㎞以上の距離を移動する場合、数百メートルの誤差は 殆どの場合余り問題になりません。
シリコンバレースーパーウエアでは、単に機能を作るだけではなく、利用者を第一に考えた 使いやすく価値のあるサービス作りの手法を提供しています。 単純に、Webサービスを作るだけではなく、どのように作って、どのようにビジネスにつなげて 行くかが鍵です。また、フリーランスの方だけではなく、就職を考えている方にも 「実践力」を養うことで「即戦力」のエンジニアとしてのスキルを身に着ける事ができます!

興味のある方は今すぐお問合せください!



またよろしければ、ニュースレターの登録をお願いします!大体週一回お届けしています。ブログよりは一歩踏み込んだもっと濃い内容を発信しています。


Copyright(c) 2020 by Silicon Valley Super Ware, all rights reserved.

コメント

このブログの人気の投稿

ユーザーインターフェースの設計

足し算以外もできるようにする

改良版足し算プログラム