2011/08/02

現在位置を取得する

現在位置を取得するには、Geolocation APIのgetCurrentPositionメソッドを使います。
お使いのPCやスマートフォンがGPSやWIFI等を利用した位置情報の取得に対応していれば、ブラウザで位置情報を使用することが可能になります。

navigator.geolocation.getCurrentPosition(位置情報取得成功Callback関数
, 位置情報取得失敗Callback関数(省略可)
, 位置情報取得オプション(省略可)
)

位置情報取得オプションには、以下のPositionOptionsオブジェクトを指定できます。


位置情報取得オプション指定PositionOptionsオブジェクト
プロパティ内容
enableHighAccuracy高い精度で位置情報を取得(true/false)
timeoutタイムアウト時間(ミリ秒)
maximumAge有効期間(ミリ秒)


位置情報取得成功Callback関数には、Positionオブジェクトが引数として渡され、Javascriptからそれらの情報にアクセスすることができます。


位置情報取得成功Callbackに渡されるPositionオブジェクト
プロパティ内容
latitude緯度
longitude経度
altitude高度
accuracy緯度、経度の誤差
altitudeAccuracy高度の誤差
heading方角
speed速度(m/秒)
timestampタイムスタンプ型の時刻情報


位置情報取得失敗Callback関数には、PositionErrorオブジェクトが引数として渡されます。

PositionErrorオブジェクト
プロパティ内容
codeエラーコード
messageエラーメッセージ

エラーコード
エラーコード意味
UNKNOWN_ERROR(0)不明なエラー
PERMISSION_DENIED(1)位置情報の利用が許可されていない
POSITION_UNAVAILABLE(2)位置情報が取得できない
TIMEOUT(3)位置情報取得タイムアウト


以下は、現在の位置情報を取得して表示する例です。







<div id="location"></div>
<script type="text/javascript">
if (!navigator.geolocation){
    window.alert("このブラウザはGeolocation APIを利用できません");
}else{
    navigator.geolocation.getCurrentPosition(
                    getLocationSuccessCallback,
                    getLocationErrorCallback,
            {
                enableHighAccuracy:true,
                maximumAge:0,
                timeout:10000
            }
                    );
}

function getLocationSuccessCallback(position){
    var l = document.getElementById("location")
    l.innerHTML = "緯度:" + position.coords.latitude + "<br />"
    +  "経度:" + position.coords.longitude + "<br />";
}
function getLocationErrorCallback(error){
    var message = "";
    switch(error.code)
    {
        case error.TIMEOUT:
            message = "タイムアウトが発生しました";
            break;
        case error.POSITION_UNAVAILABLE:
            message = "位置情報が利用できませんでした";
            break;
        case error.PERMISSION_DENIED:
            message = "Geolocation APIの利用権限がありません";
            break;
        case error.UNKNOWN_ERROR:
            message = "UNKNOWN_ERROR:" + error.message;
            break;
    }
    document.getElementById("location").innerHTML = message;
}
</script>


0 件のコメント:

コメントを投稿