如何使用WatchPosition()函数Geolocation来观看其他coords

时间:2013-07-08 03:43:32

标签: javascript google-maps-api-3 geolocation w3c-geolocation

您好我想知道是否有一种方法可以提供从坐标数组提供的WatchPosition()函数特定的Lat / Lon。

我在创建一个使用默认坐标之类的回调函数时遇到了麻烦。拉索。长

换句话说,我想创建某种类型的函数,可以以类似的方式使用但提供我的任意坐标集,以便watchPosition()可以在循环遍历数组和不同位置时更新位置已经确定了。

if(navigator.geolocation) {

    navigator.geolocation.watchPosition(function(position) {
      var pos = new google.maps.LatLng(position.coords.latitude,
                                       position.coords.longitude);

}

1 个答案:

答案 0 :(得分:2)

我需要做同样的事情,所以我编写了一个测试脚本,用一个模拟的替换navigator.geolocation对象。这是我的代码:

// Replace real geolocation with mock geolocation
delete navigator.geolocation;    
navigator.geolocation = {
  isMock: true,
  paused: true,
  delay: 100,
  shouldFail: false,
  failsAt: -1,
  unFailsAt: -1,
  errorMessage: "There was an error retrieving the position!",
  currentTimeout: -1,
  lastPosReturned: 0,
  overrideAccuracy: 0, // accuracy in m to return for all positions (overrides any existing accuracies defined in the waypoints)
  useOverrideAccuracy: false, // Whether to override acurracies defined in the waypoints with the above override accuracy      

  _geoCall: function(method, success, error, repeat) {

      return this.currentTimeout = window[method].call(null, __bind(function() {

        var nextPos;

        if(!this.paused && this.lastPosReturned < this.waypoints.length - 1){
            nextPos = this.lastPosReturned++;               
        }else{
            this.lastPosReturned = nextPos = 0;
        }


        if(!this.shouldFail && nextPos == this.failsAt) this.shouldFail = true;
        if(this.shouldFail && nextPos == this.unFailsAt) this.shouldFail = false;

        if(repeat) this._geoCall("setTimeout", success, error, true);

        if (this.shouldFail && (error != null)) {               
            return error(this.errorMessage);
        }
        else if (success != null && !this.paused) {                
            var result = this.waypoints[nextPos];
            result.isMock = true;
            if(this.useOverrideAccuracy) result.coords.accuracy = this.overrideAccuracy;               
            success(result);
            return nextPos;
        }
      }, this), this.delay);

  },
  getCurrentPosition: function(success, error) {
    return this._geoCall("setTimeout", success, error, false);
  },
  watchPosition: function(success, error) {
    this._geoCall("setTimeout", success, error, true);
    return this.currentTimeout;
  },
  clearWatch: function(id) {
    return clearInterval(this.currentTimeout);
  },
  waypoints: []
};

然后我只需要使用位置对象填充navigator.geolocation.waypoints数组。