matsuo

Googleマップに、GPSを使って現在位置(と誤差を表す円)を表示するサンプル

タイトルのとおりですが、Google マップ上に GPSなどを使って現在位置(と誤差の範囲を表す円)を表示するサンプルを作ってみました。

HTML5関連の geolocation API というものを使えば、JavaScript から現在位置情報は簡単に取得できます。値はそのまま Google Maps API に渡せますので、連携自体はとても単純です。

ちなみに、位置情報はGPS搭載のスマートフォンでないとダメというわけではなく、PCのブラウザなどからでも取得可能ですよ(環境による精度の差はありますが)。

サンプル

(ブラウザから、位置情報を取得してよいかの確認が行われます)

どうでしょうか、おおよその現在位置と、誤差を表す半透明の青い円が表示されていますでしょうか?

概要

全体のコードはあとでご紹介しますが、肝心の、位置情報の取得に必要な JavaScriptコードはたったこれだけです。

navigator.geolocation.getCurrentPosition(function(pos) {
 // 取得成功時の処理
});

結果は pos.coords に、以下のように格納されています。

    pos.coords.latitude  : 緯度
    pos.coords.longitude : 経度
    pos.coords.accuracy  : 誤差(単位はメートル)

 
で、取得した緯度経度の値をそのまま使って、Googleマップ上にピンを立ててやればOKです。

また、Googleマップには線を引いたり円を描いたりする機能もありますので、誤差の範囲を google.maps.Circle() を使ってマップ上に円で表示してみています。(この円ひとつでずいぶんそれっぽくなりました)

対象ブラウザ

気になる対象ブラウザなんですが、iPohne や Android のブラウザはもちろん、PC の Chrome, FireFox, Safari などでも問題なく取得可能です。IE は、バージョン9以降であれば取得できます。

使用ブラウザが geolocation API に対応しているかどうかは navigator.geolocation を参照すれば判定できますので、以下のようにして

if (! navigator.geolocation) {
    // 非対応ブラウザ向けの処理
}

 
コードの冒頭で処理を分けてやるとよさそうです。

ソースコード

全体のコードはこんな感じになります。(※要jQuery)

jQuery(function($) {

   // gps に対応しているかチェック
 if (! navigator.geolocation) {
      $('#gmap').text('GPSに対応したブラウザでお試しください');
        return false;
   }

   $('#gmap').text('GPSデータを取得します...');

 // gps取得開始
  navigator.geolocation.getCurrentPosition(function(pos) {
        // gps 取得成功
     // google map 初期化
       var gmap = new google.maps.Map($('#gmap').get(0), {
           center: new google.maps.LatLng(35, 135),
            mapTypeId: google.maps.MapTypeId.ROADMAP,
           zoom: 17
        });

     // 現在位置にピンをたてる
      var currentPos = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
     var currentMarker = new google.maps.Marker({
            position: currentPos
        });
     currentMarker.setMap(gmap);

     // 誤差を円で描く
      new google.maps.Circle({
            map: gmap,
          center: currentPos,
         radius: pos.coords.accuracy, // 単位はメートル
         strokeColor: '#0088ff',
           strokeOpacity: 0.8,
         strokeWeight: 1,
            fillColor: '#0088ff',
         fillOpacity: 0.2
        });

     // 現在地にスクロールさせる
     gmap.panTo(currentPos);

 }, function() {
     // gps 取得失敗
     $('#gmap').text('GPSデータを取得できませんでした');
       return false;
   });
});

参考

Geolocation.getCurrentPosition() - Web API インターフェイス | MDN
https://developer.mozilla.org/ja/docs/Web/API/Geolocation.getCurrentPosition

お問い合わせはこちら