Google Maps(グーグルマップ)上の2地点の距離/方角を取得する方法

今回はgeometryライブラリを使って2地点の距離/方角を取得してみます。

なお、Google Maps関連の記事についてはこちらにまとめてありますので、ご覧ください。

Google Maps(グーグルマップ)上の2地点の距離/方角を取得する方法

サンプル

マーカー1とマーカー2はドラッグ可能なので、ドラッグしてみてください。

地点1
地点2
2地点の距離(m)
2地点の方角

HTMLコード

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8" />
   <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
   <title>Sample Map</title>
   <script defer
       src="https://maps.googleapis.com/maps/api/js?key=(APIキー)&callback=initMap&libraries=geometry" >
   </script>
   <style type="text/css">
      #map_canvas {
         width: 100%;
         height:80%;
      }
      html,
      body {
         height: 100%;
         margin: 0;
         padding: 0;
      }
   </style>
   <script type="text/javascript">
      var map;
      var marker1;
      var marker2;
      var Latlng1;
      var Latlng2;
      var distance;
      var heading;
      function initMap() {
         var myLatlng = new google.maps.LatLng(35.68517826190777,139.7528236934712);
         Latlng1 = new google.maps.LatLng(35.686716459017205, 139.75694680150997);
         Latlng2 = new google.maps.LatLng(35.679890109918894, 139.75560807780232);
         var mapOptions = {
           zoom: 15,
           center: myLatlng
         }
         map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
         marker1 = new google.maps.Marker({
            position: Latlng1,
            label:'1',
            draggable:true,
            map: map,
            title: '地点1'
         });
         marker2 = new google.maps.Marker({
            position: Latlng2,
            label:'2',
            draggable:true,
            map: map,
            title: '地点2'
         });
         marker1.addListener('drag', function(event) {
            Latlng1 = event.latLng;
            resetTwoPointsInfo();
         });
         marker2.addListener('drag', function(event) {
            Latlng2 = event.latLng;
            resetTwoPointsInfo();
         });
         resetTwoPointsInfo();
      }
      function resetTwoPointsInfo() {
         document.getElementById('point1').innerHTML = Latlng1;
         document.getElementById('point2').innerHTML = Latlng2;
         heading = google.maps.geometry.spherical.computeHeading(
            Latlng1,
            Latlng2
         );
         distance = google.maps.geometry.spherical.computeDistanceBetween(
            Latlng1,
            Latlng2
         );

         document.getElementById('distance').innerHTML = distance;
         document.getElementById('heading').innerHTML = heading;
      }
   </script>
</head>
<body>
   <div id="map_canvas"></div>
   <table>
      <tr><th>地点1</th><td id="point1"></td></tr>
      <tr><th>地点2</th><td id="point2"></td></tr>
      <tr><th>2地点の距離(m)</th><td id="distance"></td></tr>
      <tr><th>2地点の方角</th><td id="heading"></td></tr>
   </table>
</body>
</html>

デモ

2地点の距離を測定する

2地点の距離を測定するには「computeDistanceBetween」を利用します。

パラメータ

引数
第1引数地点1(緯度/経度)
第2引数地点2(緯度/経度)
第3引数半径(任意)
デフォルトは地球の半径。基本指定しなくていいと思います。

戻り値

2地点の距離を単位:メートルで返します。

2地点の方角を取得する

2地点の方角を取得するには「computeHeading」を利用します。

パラメータ

引数
第1引数地点1(緯度/経度)
第2引数地点2(緯度/経度)

戻り値

地点1を起点とした地点2の方角を時計回りに北:0~東:90~南~180~西:ー90に値を返す。

値の範囲は「ー180(南)~180(南)」になります。

やってみたら、実際、ー180はないみたいで、南は180になるようですね。

どのような値が返ってくるかサンプルのマーカー2をドラッグして、どんな値が返ってきているのか確認してみてください。

ご参考

関連ページ