2015-04-03 5 views
0

Я разрабатываю простое приложение jQuery/Phonegap, и я использую watchPosition для постоянного расчета расстояния между текущим местоположением и некоторым удаленным местом. Это работает отлично, но это моя проблема. Я хотел бы вызвать событие (функцию), когда расстояние меньше мили от этого места. То, как я это делаю прямо сейчас, будет продолжать запускать мероприятие, пока расстояние меньше мили. Что я могу сделать, чтобы «рассказать» watchPosition, чтобы вызвать событие только один раз и продолжить просмотр моей позиции?Phonegap 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

Почему вы не используете варибал, чтобы убедиться, что ваше событие станет неуместным, когда расстояние падает ниже мили? – Blauharley

ответ

2

Просто используйте флаг для отслеживания предупреждения.

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 
}