如何使用 WatchPosition() 函数 Geolocation 观看其他坐标

Posted

技术标签:

【中文标题】如何使用 WatchPosition() 函数 Geolocation 观看其他坐标【英文标题】:How to use WatchPosition() function Geolocation to watch other coords 【发布时间】:2013-07-08 03:43:31 【问题描述】:

您好,我想知道是否有一种方法可以提供由坐标数组提供的 WatchPosition() 函数特定的纬度/经度。

我在创建使用默认坐标之类的回调函数时遇到问题。纬度坐标。长

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

if(navigator.geolocation) 

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

【问题讨论】:

【参考方案1】:

我需要做同样的事情,所以我编写了一个测试脚本来用一个模拟对象替换 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 数组。

【讨论】:

我想使用 watchPosition 跟踪我自己的位置,然后使用相同的函数观察其他人的位置,前提是他们的坐标是从数组提供的。 所以您想同时接收“真实”位置更新和模拟位置更新?您可以使用我上面的代码进行模拟位置更新,但将其重命名为 navigator.mockGeolocation。然后您将能够同时观看真实位置(navigator.geolocation.watchPosition)和模拟位置(navigator.mockGeolocation.watchPosition)。 酷,很高兴你让它工作了 :-) 请接受我对这个问题的回答,以便其他人知道它已经得到回答 :-) 单击此答案左上角附近的向上/向下箭头下方的“勾号”。当你将鼠标悬停在它上面时,我会变绿。您也可以单击向上箭头 ;-)

以上是关于如何使用 WatchPosition() 函数 Geolocation 观看其他坐标的主要内容,如果未能解决你的问题,请参考以下文章

如何停止 watchPosition() 位置检索超时错误?

谷歌地图 WatchPosition 无法正常工作

在获得准确结果之前,如何让 Geolocation watchPosition 运行?

Phonegap watchPosition测量距离和触发事件

watchPosition() 只触发一次回调

传单地图:使用 navigator.geolocation.watchPosition 更新标记?