Access

VBAで2点間(緯度経度)の距離を求める方法

VBA距離計算
記事内に商品プロモーションを含む場合があります

2点間の距離を求める方法は直線距離を求める方法と道路距離を求める方法があります。

実際には公共交通機関(電車など)による移動距離などもっと複雑な条件がありますが、今回は出発地点と到着地点の緯度と経度から、単純な直線距離と道路距離を求める方法についてサンプルプログラムをご紹介します

尚、今回は正確な距離というより参考になる数値を取得することを目的としています。

よって、多少の誤差は気にしないというスタンスです。1mも違わない正確な距離ということですともっと他の方法があるかと思いますので別記事を参考にされてください。

こんな結果になります

以下のような画面を用意しました。出発地点と到着地点の緯度と経度を入力します。

この例では東京新宿を出発地点、到着を名古屋に設定しています。

※住所から緯度経度を算出する方法はまた今度・・・

VBA距離計算

直線距離ボタンをクリックすると257.8kmと表示されます。

直線距離

道路距離ボタンをクリックすると363kmと表示されます。ついでに所要時間も表示されています。(有料道路を通らないオプションを付けています)

道路距離

2点間の直線距離を求める方法

2点間の直線距離を求める計算式としては以下のような算出方法があるそうです。

大変申し訳ありませんが、この辺りの詳しいことは私には分かりませんので、Qiigtaのサイトが参考になると思います。

  • ヒュベニの公式
  • 球面三角法
  • 測地線航海算法

参考にさせていただいたサイトはこちらです。ヒュベニの公式を使った算出方法です。

この関数を「道路距離」ボタンのクリック時イベントでCallします。引数は出発地点と到着地点の緯度・経度です。戻り値なし。

道路距離を求める方法

こちらのページを参考にさせていただきました。

GoogleのAPI関数を使用する方法です。

今回は有料道路を通らない条件で距離を算出しています。

有料道路を通らない条件は16行目の“&avoid=highways”, Falseで設定しています。

こちらをTrueにすることで有料道路を通る条件で計算してくれます。

この関数を「直線距離」ボタンのクリック時イベントでCallします。引数は出発地点と到着地点の緯度・経度です。戻り値なし。

そもそも、どんな時に使う?

今回必要に迫られて実装した訳ですが、要件としては

ある拠点で実施されるイベント(お仕事依頼)に多数の応募があった場合、拠点とご自宅の距離から優先順位をつけて採用したい

というものでした。

このニーズは繰り返し発生するニーズだったため、関数化して対応することにしました。

追加情報

2018/09/11より、GoogleMapの仕様変更により上記のコードがエラーになるようになりました。

これは、GoogleがMapAPIの提供について条件付有料化を実施したことに起因します。

今後はAPIキーの発行が必須となりますので、参考になる記事をご紹介します。

お使いのGoogleアカウントにおいてAPIキーを発行してからご利用ください。

簡潔にいうと、無料枠は月間200ドルまで。超過する分については主にクレジット決済される。(クレジットカードの登録がない場合はエラー)

月間200ドルとは、約28000リクエスト分に相当。

とのことです。詳しくは各記事を参考にされてください。

\逆引き辞書があると便利です/
[itemlink post_id=”1386″]

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。