JavaScript 一度だけ位置情報を取得する

最終更新日

位置情報を一度だけ取得するには、Geolocation APIの「getCurrentPosition()」メソッドを使います。getCurrentPosition()メソッドの最初のパラメータには、位置情報の取得に成功した場合に呼び出される関数を指定します。2番目のパラメータには、位置情報が取得できなった場合、エラー時の処理を行う関数を指定します。2番目のパラメータは必須ではないため省略可能です。3番目のパラメータは位置情報の取得に関数オプションを設定します。指定できるオプションは次の表です。

オプション説明
enableHighAccuracy「true」を指定すると、詳細な位置を返すようにする。ただし、スマートフォンではバッテリーの消耗が激しくなる
timeoutタイムアウトまでの時間をミリ秒で指定する
maximumAge取得した位置情報を何ミリ秒有効にするか指定する。「0」を指定すると、常に最新の位置情報になる。ただしスマートフォンではバッテリーの消耗が激しくなる。また、パソコンの場合は「0」を指定しても最新の情報が返されない場合がある

位置情報を得るには、ユーザーの許可が必要になります。ユーザーの許可が得られない場合は、エラーになります。他にも、位置情報が取得できない、時間切れ(タイムアウト)の場合は、次の表に示すエラーが返されます。このエラーコードは、エラー発生時に呼び出される関数に渡されるオブジェクトの「code」プロパティに格納されています。また、エラーメッセージは「message」プロパティに格納されています。

エラーコード値キーワード値説明
1PERMISSION_DENIEDユーザーが位置情報の提供を拒否した
2POSITION_UNAVAILABLE何らかの原因で位置情報が取得できなかった
3TIMEOUTタイムアウトになった

位置情報が取得できた場合に呼び出される関数には、オブジェクトが渡されます。このオブジェクト内にある「coords」オブジェクトに位置情報を示すプロパティがあります。位置情報を示すプロパティは、次の表のようになります。緯度と経度は、世界測地系WGS84に準拠しています。

プロパティ説明
latitude緯度
longitude経度
altitude緯度と経度の誤差。単位はメートル
accuracy高度。取得できない場合は「null」、もしくは、「undefined」
altitudeAccuracy高度の誤差。単位はメートル
heading移動方向。移動していない場合は「null」、もしくは、「undefined」
speed移動速度。単位はm/sec
<body>
<script>
    window.addEventListener("load" , function(){

        var ele = document.getElementsByTagName("output")[0];
        //Geolocation APIが使えるか調べる
        if(!navigator.geolocation){
            ele.innerHTML = "Geolocation APIは使えません";
            return;
        }
        //一度だけ位置情報を取得する
        navigator.geolocation.getCurrentPosition(function(position){
            //緯度を求める
            var lat = position.coords.latitude;
            //経度を求める
            var lon = position.coords.longitude;
            //緯度経度の誤差を求める
            var acc = position.coords.accuracy;
            //高度を求める
            var alt = position.coords.altitude;
            //高度の誤差を求める
            var accAlt = position.coords.altitudeAccuracy;

            ele.innerHTML = "緯度:"+lat+"<br>";
            ele.innerHTML += "経度:"+lon+"<br>";
            ele.innerHTML += "緯度経度の誤差:"+acc+"m<br>";
            ele.innerHTML += "高度:"+alt+"<br>";
            ele.innerHTML += "高度の誤差:"+accAlt+"<br>";

        },function(err){
            //エラーの場合、エラーコードを出力
            ele.innerHTML = "エラー:"+err.code;
        },{
            //詳細な位置を返すように設定
            enableHighAccuracy:true
        });

    }, false);
   

</script>
<output></output>

位置情報を取得してよいかの確認が行われます。ここで拒否すると位置情報は取得できません。

実行結果

許可すると、取得した位置情報が表示されます。

実行結果