HTML入門 | HTML5 API | Geolocation

HTML5 API

HTML5で新しく追加されたAPIは、すべてJavaScriptで実装されている。 そのため、この内容を理解するにはJavaScriptの基礎知識が必要である。

Geolocation API

geolocation APIは、ユーザーの現在位置情報を取得するときに使用するJavaScript APIである。 ユーザーの緯度および経度に関する情報は、JavaScriptを使ってWebサーバーへ送信される。

これを利用すると、ユーザーの位置を地図に表示したり、ユーザーの近くの店舗を探したりするような位置情報サービスを提供できる。 しかし、このような情報はユーザーのプライバシーを侵害する可能性が高いため、ユーザーの同意なしには使用できないようになっている。

geolocation APIをサポートする主要Webブラウザのバージョンは次のとおりである。

API ie chrome firefox safari opera
geolocation 9.0 5.0 - 49.0 (http) / 50.0 (https) 3.5 5.0 16.0

Chrome 50.0以降では、HTTPSのような安全なプロトコルでのみgeolocation APIの動作が許可されている。

getCurrentPosition()メソッド

getCurrentPosition()メソッドを使用すると、ユーザーの位置に対する緯度と経度の値を取得できる。 このメソッドの第1引数には、取得したユーザーの位置情報を出力する関数が入る。

function findLocation() {
    if (navigator.geolocation) { 
        navigator.geolocation.getCurrentPosition(showYourLocation); 
    } else { 
        loc.innerHTML = "この文はユーザーのWebブラウザがGeolocation APIをサポートしていない場合に表示されます。"; 
    }
}

このメソッドの第2引数には、位置情報に関するエラーを処理する関数が入る。

function showErrorMsg(error) {
    switch(error.code) {
        case error.PERMISSION_DENIED:
        loc.innerHTML = "この文はユーザーがGeolocation APIの使用要求を拒否した場合に表示されます。"
        break;
        case error.POSITION_UNAVAILABLE:
        loc.innerHTML = "この文は取得した位置情報を使用できない場合に表示されます。"
        break;
        case error.TIMEOUT:
        loc.innerHTML = "この文は位置情報を取得するための要求が許可時間を超過した場合に表示されます。"
        break;
        case error.UNKNOWN_ERROR:
        loc.innerHTML = "この文は不明なエラーが発生した場合に表示されます。"
        break;
    }
}

このように取得したユーザーの位置情報をGoogleマップで表示できる。

function showYourLocation(position) {
    var userLat = position.coords.latitude;
    var userLng = position.coords.longitude;
    var imgUrl = "http://maps.googleapis.com/maps/api/staticmap?center=" + userLat + "," + userLng + "&zoom=15&size=500x400&sensor=false";
    document.getElementById("mapLocation").innerHTML = "<img src='"+imgUrl+"'>";
}

上の例のように単純な画像として表示するだけでなく、Googleマップスクリプトを利用した連携も可能である。

function showYourLocation(position) {
    var userLat = position.coords.latitude;
    var userLng = position.coords.longitude;
    var userLocation = new google.maps.LatLng(userLat, userLng);
    loc = document.getElementById("mapLocation");
    loc.style.width = '500px';
    loc.style.height = '400px';
    var mapOptions = { 
        center: userLocation, 
        zoom: 15, 
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        mapTypeControl: false, 
        navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL} 
    }
    var map = new google.maps.Map(loc, mapOptions);
    var marker = new google.maps.Marker({position:userLocation,map:map,title:"ここが現在位置です!"});
}

Geolocation APIメソッド

Method 説明
getCurrentPosition() ユーザーの現在位置を取得する。
watchPosition() ユーザーの現在位置を取得した後、ユーザーの移動に応じて継続的に位置情報を更新する。
clearWatch() watchPosition()メソッドの実行を停止する。

getCurrentPosition()メソッドの戻り値

属性 戻り値
coords.latitude 小数で表された緯度値
coords.longitude 小数で表された経度値
coords.accuracy 緯度値と経度値の正確度
coords.altitude 平均海面を基準とする高度値(標高)
coords.altitudeAccuracy 高度値の正確度
coords.heading 北を基準とした現在の進行方向に対する時計回りの角度値(˚)
coords.speed 1秒あたりに移動したメートル数を表す速度値(秒速)
timestamp 位置情報を取得した時刻を表す。