地理定位插件

地理位置用于获取有关设备的纬度和经度的信息。

位置信息的常见来源包括 全球定位系统(GPS)定位网络 信号如IP地址,RFID推断,WiFi和蓝牙的MAC地址, 和GSM / CDMA小区。有没有保证,API返回 装置的实际位置

这个插件定义一个全局navigator.geolocation对象deviceready事件之后才能使用。

document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() {
        console.log("navigator.geolocation works well");
    }

方法:

lnavigator.geolocation.getcurrentposition

lnavigator.geolocation.watchposition

lnavigator.geolocation.clearwatch

对象(只读

lPosition

lPositionError

Coordinatesnavigator.geolocation.getCurrentPosition(geolocationSuccess,
                                         [geolocationError],
                                         [geolocationOptions]);

参数:

geolocationSuccess: 回调,通过当前位置。

geolocationError: (可选)回调执行如果出现错误。

geolocationOptions:(可选)地理位置的选择。

例子

// onSuccess Callback
    // This method accepts a Position object, which contains the
    // current GPS coordinates
    //
    var onSuccess = function(position) {
        alert('Latitude: '          + position.coords.latitude          + '\n' +
              'Longitude: '         + position.coords.longitude         + '\n' +
              'Altitude: '          + position.coords.altitude          + '\n' +
              'Accuracy: '          + position.coords.accuracy          + '\n' +
              'Altitude Accuracy: ' + position.coords.altitudeAccuracy  + '\n' +
              'Heading: '           + position.coords.heading           + '\n' +
              'Speed: '             + position.coords.speed             + '\n' +
              'Timestamp: '         + position.timestamp                + '\n');
    };

    // onError Callback receives a PositionError object
    //
    function onError(error) {
        alert('code: '    + error.code    + '\n' +
              'message: ' + error.message + '\n');
    }

    navigator.geolocation.getCurrentPosition(onSuccess, onError);

如果Android服务是关闭的onError回调后调用timeout 区间(如果指定)。超时参数没有指定则不回调


navigator.geolocation.watchPosition

返回设备当前位置的同时,位置的变化进行检测。 当设备返回一个新的位置,geolocationsuccess执行一个回调Position 对象作为参数。如果 有错误的geolocationerror执行一个回调PositionError 对象作为参数。

var watchId = navigator.geolocation.watchPosition(geolocationSuccess,
                                                  [geolocationError],
                                                  [geolocationOptions]);

参数:

geolocationSuccess: 回调,通过当前位置.

geolocationError: (可选)回调执行如果出现错误

geolocationOptions: (可选)地理位置的选择

返回:

字符串:返回一个表ID引用表的位置间隔。watchId 应用navigator.geolocation.clearwatch停止看位置的变化。

例子:

// onSuccess Callback
    //   This method accepts a `Position` object, which contains
    //   the current GPS coordinates
    //
    function onSuccess(position) {
        var element = document.getElementById('geolocation');
        element.innerHTML = 'Latitude: '  + position.coords.latitude      + '<br />' +
                            'Longitude: ' + position.coords.longitude     + '<br />' +
                            '<hr />'      + element.innerHTML;
    }

    // onError Callback receives a PositionError object
    //
    function onError(error) {
        alert('code: '    + error.code    + '\n' +
              'message: ' + error.message + '\n');
    }

    // Options: throw an error if no update is received every 30 seconds.
    //
    var watchID = navigator.geolocation.watchPosition(onSuccess, onError, { timeout: 30000 });


geolocationOptions

自定义的地理位置检索的可选参数 Position

{ maximumAge: 3000, timeout: 5000, enableHighAccuracy: true };

Options

enableHighAccuracy:提供了一个暗示的应用需要尽可能最好的结果。默认情况下,使用基于网络的方法检索设备的Position。将此属性设置为true告诉框架使用更精确的方法,如卫星定位。 (Boolean)

timeout: 允许回调的等待时间的最大长度(毫秒,navigator.geolocation.getcurrentpositiongeolocation.watchposition直到相应的geolocationsuccess回调函数执行。如果geolocationsuccess回调不调用的这段时间内,该geolocationerror通过一个回调positionerror.timeout错误代码。(注意,当结合使用geolocation.watchposition,的geolocationerror回调可以说是在一个区间上的每一个timeout毫秒!)(Number)

maximumAge: 缓存位置:接受其年龄不大于指定的毫秒时间 (Number)

如果Android服务是关闭的onError回调后调用timeout 区间(如果指定)。 超时参数没有指定则不回调

navigator.geolocation.clearwatch

停止监听装置的位置被改变watchid参数.

navigator.geolocation.clearWatch(watchID);

参数:

watchid:watchposition id。(字符串)

例子:

 // Options: watch for changes in position, and use the most
    // accurate position acquisition method available.
    //
    var watchID = navigator.geolocation.watchPosition(onSuccess, onError, { enableHighAccuracy: true });

    // ...later on...

    navigator.geolocation.clearWatch(watchID);


Coordinates

Coordinates 对象连接到Position 对象, 提供回调函数在当前位置的要求。 它包含一组属性的描述地理坐标。

属性:

latitude: 维度(十进制数字). (Number)

longitude: 维度(十进制). (Number)

altitude:高度(米). (Number)

accuracy: 精度等级的纬度和经度坐标(Number)

altitudeAccuracy:准确度等级的高度Coordinates ,米. (Number)

heading: 相对于北的方向,以度为单位计数顺时针. (Number)

speed: 目前设备的地面速度,指定米每秒(Number)

Android设备不支持altitudeAccuracy

 

PositionError

这个PositionError对象传递到geolocationerror回调函数发生错误时有navigator.geolocation。

属性:

code: 一个预定义的错误代码如下

message: 错误信息描述的细节,遇到的错误.

常数:

PositionError.PERMISSION_DENIED

用户不允许应用程序检索位置信息.

PositionError.POSITION_UNAVAILABLE

该设备无法获取位置。一般来说,这意味着该设备没有连接到网络或找不到卫星定位。

PositionError.TIMEOUT

该设备无法检索指定的时间内的一个位置timeout包括在geolocationoptions。当使用navigator.geolocation.watchposition,这个错误可以反复传递给geolocationerror每一个回调timeout毫秒。

 

完整例子:

JavaScript:

//用于获取当前位置
function getPosition() {

   var options = {
      enableHighAccuracy: true,
      maximumAge: 3600000
   }
	
   var watchID = navigator.geolocation.getCurrentPosition(onSuccess, onError, options);

   function onSuccess(position) {

      alert('Latitude: '          + position.coords.latitude          + '\n' +
         'Longitude: '         + position.coords.longitude         + '\n' +
         'Altitude: '          + position.coords.altitude          + '\n' +
         'Accuracy: '          + position.coords.accuracy          + '\n' +
         'Altitude Accuracy: ' + position.coords.altitudeAccuracy  + '\n' +
         'Heading: '           + position.coords.heading           + '\n' +
         'Speed: '             + position.coords.speed             + '\n' +
         'Timestamp: '         + position.timestamp                + '\n');
   };

   function onError(error) {
      alert('code: '    + error.code    + '\n' + 'message: ' + error.message + '\n');
   }
}
//用于查看位置变化
function watchPosition() {

   var options = {
      maximumAge: 3600000,
      timeout: 3000,
      enableHighAccuracy: true,
   }

   var watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);

   function onSuccess(position) {

      alert('Latitude: '          + position.coords.latitude          + '\n' +
         'Longitude: '         + position.coords.longitude         + '\n' +
         'Altitude: '          + position.coords.altitude          + '\n' +
         'Accuracy: '          + position.coords.accuracy          + '\n' +
         'Altitude Accuracy: ' + position.coords.altitudeAccuracy  + '\n' +
         'Heading: '           + position.coords.heading           + '\n' +
         'Speed: '             + position.coords.speed             + '\n' +
         'Timestamp: '         + position.timestamp                + '\n');
   };

   function onError(error) {
      alert('code: '    + error.code    + '\n' +'message: ' + error.message + '\n');
   }

}

Html引用示例

<button onclick = "getPosition()">CURRENT POSITION</button>
<button onclick = "watchPosition()">WATCH POSITION</button>