我开发了一款带有PhoneGap for Android的jQuery Mobile应用程序。现在,我需要一个GPS追踪器。我想得到用户的位置,并将其与数据库中的某些坐标进行比较。
我想知道,如果这种方法没问题,我是否应该更改某些内容以及如何只显示一次消息?
$( document ).on( "pageinit", function( event ) {
function userDistance() {
// Wait for PhoneGap to load
document.addEventListener("deviceready", onDeviceReady, false);
var watchID = null;
// PhoneGap is ready
function onDeviceReady() {
watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
// Update every 10 seconds
var options = { frequency: 10000 };
watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
}
// onSuccess Geolocation
function onSuccess(position) {
// user location
var loc1 = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
// target location
$.getJSON("http://server:8080/getCoords", function(data) {
var loc2 = new google.maps.LatLng(data[0].latitude, data[0].longitude);
// distance
var distance = google.maps.geometry.spherical.computeDistanceBetween (loc1, loc2);
if (distance < 50) {
alert("target arrived");
}
});
}
// onError Callback receives a PositionError object
function onError(error) {
}
// watching position every 20s
setTimeout(userDistance, 20000);
}
userDistance();
});
答案 0 :(得分:0)
1)在global / root notifications = 0中创建一个变量。如果用户已收到通知,此变量将告诉您的函数 2)在警报例程中,添加以下代码
if (distance < 50 and **notified==0**) {
**notified=1;** // tells your app that the user has been notified already, and wont alert again
alert("target arrived");
}
3)在你的CHECK距离例程中,添加距离&gt;的评估。 50,重置变量,通知= 0
这个逻辑解决了这些问题: 1)当他/她处于地图的目标距离/半径(50米)时,仅通知用户一次 2)如果用户离开目标半径,当他进入半径时,将再次通知他。
希望这有帮助