当用户在地理围栏之外时提醒一次

时间:2012-10-12 14:52:17

标签: javascript jquery arrays google-maps google-maps-api-3

如果地图标记位于地理围栏的内部或外部,我会检查波纹管代码。

我将在界限范围内检测到警报。

我的问题是地图标记不断刷新,我不希望警报重复过来。

我需要在播放闹钟时设置一些内容。然后,只有在未设置该事件时才进行警报。

当在边界内检测到用户时,它也将取消设置。

    if (name === f.contact) {
        var fence = new google.maps.LatLng(f.lat, f.lng);
        var dist = google.maps.geometry.spherical.computeDistanceBetween(posi, fence);
        // check if in/out of fence
        if (dist > f.radius) {
            console.log(f.contact+" : "+dist+" meters - outside the fence");
            // OMG outside the fence play an alarm
        } else {
            console.log(f.contact+" : "+dist+" meters - inside the fence");
            // Back inside the fence, reset the alarm
        }
    }

我在考虑制作一个像这样的数组

var alertSent = [];

然后如果在地理围栏之外添加用户名

alertSent.push(name);

我如何检查数组中是否存在名称?

当我回到围栏内时,如何从数组中删除名称?

2 个答案:

答案 0 :(得分:1)

如果您最终使用数组,那么您可以搜索每个索引,直到找到像

这样的字符串

How do I check if an array includes an object in JavaScript? 要么 Best way to find if an item is in a JavaScript array?

你也可以考虑,注册事件和事件处理器来处理这个问题,这将是一个更好的设计。

或者你也可以像使用

一样使用hashmap类的javascript实现
alertSent["driver1"]=true;,

在这种情况下查找将很简单,只需使用,

  

alertSent [ “驱动1”]

获取布尔值。但在这种情况下要注意数组空间。

答案 1 :(得分:1)

您可以使用Object作为关联数组,并使用名称作为键和发送/未发送的布尔值。如果alertSent [name]根本不包含名称,它也会评估为假值。

var alertSent = {};

// if user outside: check
if (!alertSent[name]) {
    // show alert
    // remember that alert was shown
    alertSent[name] = true;
}

// remove name from alertSent:

alertSent[name] = false;