緯度経度のデータからランニングした距離をExcelで計算してみた。
緯度経度から距離を計算しているランニングアプリ
ランニングをしている人なら、一度はランニングアプリを使って走った距離やスピードを計測してみたことがあると思います。
でも、これってどうやって測っているのでしょうか?
そうです、GPSを使っていますね。
これで緯度経度は分かります。
でも知りたいのは移動距離ですから、緯度経度の変化を距離に換算しないといけません。
この換算をアプリ内で行っているわけですが、どのように計算しているのか知りたいですね。
そこで、緯度経度データから移動距離への換算をExcelでやってみて、アプリの値と一致するか試してみました。
アプリは走った緯度経度を記録すると同時に、距離とスピードも記録してくれるGPS Loggerを使いました。
データ取得間隔はいろいろ設定できるのですが、今回は3秒間隔にしました。
データはこちらです。
緯度経度を距離に換算する方法
緯度経度とは?
まず緯度経度とは何かを復習しておきましょう。
緯度経度とは地球上での位置を示す座標のようなものです。
よく出てくるx-y平面に例えると、x軸が経度、y軸が緯度に相当します。
三重大学 シェープファイルを読む から抜粋&加筆
この図では緯度経度ともに5°間隔で描かれていますが、この5°が何kmに相当するかが分かれば、緯度経度のデータから距離が求められそうですね。
そのためには、上図のような平面ではなく、球体で緯度経度を見る必要があります。
緯度1°当たりの距離の計算方法
まずは簡単な緯度から見てみましょう。
地球を南北方向の面で真っ二つに輪切りにすると、次のような断面になります。
この時、断面の円周は地球の半径をR(km)とすると、2πR(km)になります。
これが緯度360°当たりの距離になります。
ですので、緯度1°当たりの距離は
2πR÷360
で計算できます。
赤道の半径は6,378.137(km)と言われていますので、上式に代入すると111.319(km)になります。
経度1°当たりの距離の計算方法
次に経度1°当たりの距離ですが、こちらは少し難しいです。
今度は地球を東西方向の平面で真っ二つに輪切りにします。
例えば赤道の平面で輪切りにすると、次のようになります。
この場合は輪切り面の円周が経度360°の距離に相当しますので、円周を360で割れば経度1°当たりの距離になります。
この考え方は緯度の場合と同じです。
ところが、赤道よりも北よりの平面で輪切りにした場合はどうなるでしょう?
こうなります。
輪切りの断面が小さくなるため、半径が小さくなります。
そうすると、経度1°当たりの距離も小さくなりますね。
例えば、赤道直下に位置するシンガポールでの経度1°当たりの距離と、北緯35°当たりに位置する東京での経度1°当たりの距離を比較すると、後者の方が小さくなるのです。
従って経度1°当たりの距離を求めるには、緯度が何°であるかの条件が必要になります。
例えば緯度が45°の地点における輪切り面の半径は次のようになります。
従って経度1°当たりの距離は
2πRcos45°÷360
で計算できます。
扁平率で補正するやり方
以上の計算式で大雑把な距離は計算できるのですが、より精密に計算するには扁平率で補正します。
どういうことかというと、地球は完全な球体ではなく楕円体なのです。
ウィキペディア 地球楕円体 から抜粋&加筆
このように地球は南北方法に少し潰れた楕円体です。
南北を軸に自転しているので、遠心力で赤道半径方向に少し広がっていると考えるとわかりやすいですね。
扁平率とは楕円体の潰れ度合を示す指標で、
扁平率=(長半径―短半径)÷長半径
で計算できます。
そして、この指標を使った地球の形を表す世界基準のモデルがいくつかあり、そのうちGRS80楕円体のモデルが最もよく使われています。
それによると
赤道半径=6,378,137m
扁平率=1/298.257222101
となっていて、これから
極半径=6,248,982m
であることが導けます。
緯度は極半径が基準になりますので、先ほどの緯度1°当たりの距離を求める式
2πR÷360
のRに極半径6,248,982mを代入すると、109.065kmが緯度1°当たりの距離となります。
次に経度ですが、基準となる緯度を決めないといけませんので、最初のデータから緯度の平均をまずは求めます。
Average関数で計算すると11.55°ということがすぐにわかりますので、
2πRcos11.55°÷360
のRに赤道半径6,378,137mを代入して、経度1°当たりの距離は110.946kmと計算できます。
緯度経度データから走行距離をExcelで計算してみる
ここまでで緯度経度1°当たりの距離が求められましたので、いよいよ緯度経度のデータから走行距離を計算してみます。
緯度経度データは3秒ごとに記録されていて、全部で435組(含スタート点)、つまり435個の点があります。
沢山あるので計算が大変そうですが、最初の2点間の距離を求める式さえ入力すれば、あとはコピペでOKです。
2点間の距離は三平方の定理により、下記のように簡単に計算できます。
これを最初のデータの横に入力してみましょう。
ここで先ほど計算した緯度経度1°当たりの距離109.065と110.946を使っています。
これで各点間の距離がkmで計算できたので、隣の列に累積距離を計算しておきましょう。
これでI列に累積走行距離が計算できました。
アプリでも同じように累積走行距離を計算してF列に表示していますので、2つの列を比較してみましょう。
このように累積でも0.01%の差に収まりました。
累積距離kmで比較するとアプリで計算された値が5.564kmであるのに対して、Excelでの計算値が5.564555071kmですので、ほぼ一致しました。
アプリでもこのように計算しているんですね。
走行エリアの面積をExcelで計算する方法は?
前回の記事フリーハンドの多角形の面積をExcelを使った2通りの方法で求めてみた。で多角形の頂点の座標がわかっている場合の面積の求め方を試してみました。
【2通りの方法で!】あらゆる画像の面積をExcelで計算する方法をわかりやすく
今回の緯度経度データも座標データの一種ですので、同じようにしてランニングしたエリアの面積を求めることができます。
緯度経度のデータを一旦kmに直してから計算すると、約1.4km2になります。
それが何の役に立つのだと思われるかもしれませんが、駐車場や遊休地などのエリアの面積を知りたい時に、緯度経度を記録しながらそのエリアの周辺を歩くことによって面積を求めることができます。
図面がないとか、エリアが広い時には、このやり方が便利です。