Phonegap watchPosition测量距离和触发事件

Posted

技术标签:

【中文标题】Phonegap watchPosition测量距离和触发事件【英文标题】:Phonegap watchPosition measuring distance and trigger event 【发布时间】:2015-04-03 16:42:09 【问题描述】:

我正在开发一个简单的 jQuery / Phonegap 应用程序,我正在使用 watchPosition 不断计算当前位置和某个远程位置之间的距离。这工作得很好,但这是我的问题。当距离该位置不到一英里时,我想触发一个事件(函数)。只要距离不到一英里,我现在的方式就会继续触发事件。我该怎么做才能“告诉” watchPosition 只触发一次事件并继续观察我的位置

我包含了我认为相关的代码部分供您参考。

watchPosition 的成功部分:

var remoteLat = xx.xxxx;
var remoteLng = xx.xxxx;

function onSuccess(position) 
var myLat = position.coords.latitude;
var myLng = position.coords.longitude;
var distancia = gps_distance(myLat, myLng, remoteLat, remoteLng);

if (distancia < 1) 
    alert('Almost There');
    playSound();



距离计算功能:

function gps_distance(lat1, lon1, lat2, lon2) 

var R = 3959; // use 3959 for miles or 6371 for km
var dLat = (lat2 - lat1) * (Math.PI / 180);
var dLon = (lon2 - lon1) * (Math.PI / 180);
var lat1 = lat1 * (Math.PI / 180);
var lat2 = lat2 * (Math.PI / 180);

var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c;

return d;

如果需要更多代码,请告诉我。我还想感谢之前被问到的关于计算距离Link 的问题。谢谢!

【问题讨论】:

为什么你不使用变量来确保当距离低于一英里时你的这个事件变得无关紧要? 【参考方案1】:

只需使用标志来跟踪警报。

var alerFlag = true;
if (distancia < 1 && alerFlag == true) 
    alert('Almost There');
    playSound();
    alerFlag = false;
else
    alerFlag = true; // This is for whenever you go greater than 1 mi

【讨论】:

以上是关于Phonegap watchPosition测量距离和触发事件的主要内容,如果未能解决你的问题,请参考以下文章

使用 watchPosition 或 getCurrentPosition 在 phoneGap App 中的最短更新时间?

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

navigator.geolocation.watchPosition 以速度返回 NaN

如何查看phonegap中的gps状态?

实现Phonegap Android的Geolocation API

在 Android 上使用 PhoneGap 进行地理定位