Google Map API v3で距離を算出する方法(JavaScript)

スポンサーリンク

仕事で2点間の距離を算出する必要に迫られました。
最初はどうやってやるのか想像もつかず、調べても事例が少なく困っていました。

唯一見つけたのが、「Google Maps API V3で距離を求める方法 | ロジカルアーツ研究所」。
これがめちゃくちゃ参考になり、なんとか解決できました。

一応、プログラムを本職としていますが、知らないことは数多くありますね。
というか、知らないことだらけ。

Google Maps 8Bit April Fools Day Worldmap
Google Maps 8Bit April Fools Day Worldmap / Vanderelbe.de

このページの目次

ソースコード

解決できたソースコードは以下のとおりです。

     <script type="text/javascript" src="http://maps.google.com/maps/api/js?libraries=geometry&sensor=true&language=ja"></script>
     <script type="text/javascript" src="http://code.google.com/apis/gears/gears_init.js"></script>
     <script>
          var posA, posB;
          var geocoder;
         
          //住所から距離算出
          function showAddress(adrs) {
               geocoder = new google.maps.Geocoder();
              
               var req = {
                  address: adrs
                };
               geocoder.geocode(req, geoResultCallback);
          }
         
         function geoResultCallback(result, status) {
               if (status != google.maps.GeocoderStatus.OK) {
                    return;
               }
               posB = result[0].geometry.location;
               var distance = google.maps.geometry.spherical.computeDistanceBetween(posA, posB);
               alert(distance.toFixed(0) + "m");
         }
        
        
         function initialize() {
              if(navigator.geolocation) {
                   navigator.geolocation.getCurrentPosition(function (position) {
                       // 位置情報を取得
                       var coords = position.coords;
                       posA = new google.maps.LatLng(coords.latitude, coords.longitude);
                   });
              } else if (google.gears) {
                   var geo = google.gears.factory.create('beta.geolocation');
                  geo.getCurrentPosition(function(position) {
                      posA = new google.maps.LatLng(position.latitude,position.longitude);
                  });
              }
         }
     </script>
</head>
<body onload="initialize()"> 

ソースコード解説

まず、最初の2行でGoogle MapのAPIを読み込んでいます。これはおまじないみたいなもの。
距離を求める処理をさせるために「libraries=geometry」が必要です。(1行目)

JavaScriptのinitialize()関数で現在位置を取得しています。

showAddress()関数に住所(例:東京都)を引数に渡してあげると、
先のinitialize()関数で取得した現在位置と引数の住所の距離を計算してくれます。

距離を計算しているのが、「google.maps.geometry.spherical.computeDistanceBetween(posA, posB);」の部分。
最後は返ってきた値を整数に戻して、メートルを表す、「m」を後ろにくっつけてます。

実行すると「4083m」という感じで表示されます。

追記

PHPでも同様のことができます。JavaScriptではなく、PHPで同じことをしたい場合は以下の記事がおすすめです。
Google Map API v3で2点間の距離を算出する方法(PHP)