拙著「WordPress Web開発逆引きレシピ」が発売されました。
WordPressの様々なカスタマイズについて、逆引きの形式で取り上げています。
PHP 7.0での動作確認も行っています。
Geolocation APIを使ってみた(その1)
HTML5の仕様策定が進むのに伴って、関連の各種APIも仕様が決められ、各Webブラウザの実装も進みつつあります。
それらのAPIの中の1つに、現在位置の情報を取得する「Geolocation API」があります。
このGeolocation APIを使ってみたので、使い方をまとめます。
1.getCurrentPosition関数
Geolocation APIは、Geolocationオブジェクトを介して利用します。
Geolocationオブジェクトは、Navigatorオブジェクトのgeolocationプロパティ(navigator.geolocation)で得ることができます。
現在位置を取得するには、Geolocationオブジェクトの「getCurrentPosition」というメソッドを実行します。
基本的には、このメソッドのパラメータとして、2つのコールバック関数を渡します。
1つ目のパラメータは、位置を取得できた時に実行するコールバック関数です。
このコールバック関数には、位置情報を表すオブジェクトが渡されます。
オブジェクトには以下のようなプロパティがあります。
| プロパティ | 内容 |
|---|---|
| coords.latitude | 現在地の緯度 |
| coords.longitude | 現在地の経度 |
| timestamp | 位置を取得した時刻のタイムスタンプ |
また、2つ目のパラメータは、位置の取得に失敗した時に実行するコールバック関数です。
このコールバック関数には、エラーの情報を表すオブジェクトが渡されます。
オブジェクトには以下のようなプロパティがあります。
| プロパティ | 内容 |
|---|---|
| code | エラーコード |
| message | エラーメッセージ |
上記のことから、基本的には以下のようなJavaScriptで位置情報を取得して処理します。
navigator.geolocation.getCurrentPosition(showMap, showError);
function showMap(position) {
// position.coord.latitudeが緯度を表す
// position.coord.longitudeが緯度を表す
// これらの値を使って、現在地に関する何らかの処理を行う
}
function showError(error) {
// error.codeがエラーコードを表す
// error.messageがエラーメッセージを表す
// これらの値を元に、エラーメッセージを表示するなどの処理を行う
}
2.現在地の地図をGoogleマップで表示する
Geolocation APIを使った簡単な例として、現在地の地図をGoogleマップで表示するプログラムを作ってみました。
IDが「geo」のdiv要素に、Googleマップを表示するようにします。
HTML側は以下の通りです。
Webブラウザのウィンドウいっぱいに、IDが「geo」のdiv要素を表示するようにしています。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Geolocation</title>
<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=yes">
<style type="text/css">
* { margin : 0; padding : 0 }
body, html { height : 100%; }
#geo { width : 100%; height : 100%; }
</style>
</head>
<body>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
<script type="text/javascript" src="./geo.js"></script>
<div id="geo">地図を読み込んでいます</div>
</body>
</html>
また、JavaScript側は以下の通りです。
27行目でgetCurrentPositionメソッドを実行し、現在地を取得しています。
そして、取得に成功した場合は、1~18行目のshowMap関数が実行されます。
showMap関数では、パラメータを「position」という変数に代入しています。
したがって、position.coord.latitude/position.coord.longitudeで、現在地の緯度/経度を得ることができます。
これらの値から、11行目で現在地を表すGoogleマップのLatLngオブジェクトを生成しています。
そして、12行目でGoogleマップの中心を現在地に合わせています。
function showMap(position) {
var myOptions = {
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: true,
mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU }
};
var mapdiv = document.getElementById("geo");
var map = new google.maps.Map(mapdiv, myOptions);
var center = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
map.setCenter(center);
var marker = new google.maps.Marker({
position: center,
map: map,
title: '現在地'
});
}
function showError(error) {
document.getElementById('geo').innerHTML = 'Geolocation Error : ' + error.message;
}
if (window.addEventListener) {
window.addEventListener('load', function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showMap, showError);
}
else {
alert('お使いのWebブラウザはGeoLocation APIに対応していません。');
showMap({ coords : { latitude : 35.681382, longitude : 139.766084 }});
}
}, false);
}
else {
window.attachEvent('onload', function() {
alert('お使いのWebブラウザはGeoLocation APIに対応していません。');
showMap({ coords : { latitude : 35.681382, longitude : 139.766084 }});
});
}
3.動作例
上記のJavaScriptを若干修正して、この記事の上で動作するようにしたサンプルを、以下に入れておきました。
Geolocation APIに対応したWebブラウザをお使いの場合は、「ここをクリックすると地図を表示します。」のリンクをクリックすると、現在地の地図が表示されます。
