带有jQuery mobile,PhoneGap和Google Maps的GPS追踪器

时间:2014-01-26 10:12:48

标签: android jquery google-maps jquery-mobile cordova

我开发了一款带有PhoneGap for Android的jQuery Mobile应用程序。现在,我需要一个GPS追踪器。我想得到用户的位置,并将其与数据库中的某些坐标进行比较。

我想知道,如果这种方法没问题,我是否应该更改某些内容以及如何只显示一次消息?

  • 应用程序应每20秒检查一次位置
  • 如果用户靠近目标(50米),他应该收到一条消息(但只有一次)

$( 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();

});

1 个答案:

答案 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)如果用户离开目标半径,当他进入半径时,将再次通知他。

希望这有帮助