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 | 位置情報を取得した時刻を表す。 |