Vince Lowe
Vince Lowe

Reputation: 3620

Alert once when user is outside geofence

I have the bellow code checking if a map marker is inside or outside of a geofence.

i am going to make it alert detected out of the bounds.

My problem is the map markers a refreshing constantly and i do not want the alert to be repeated over an over.

I need to set something when the alarm is played. Then only do the alert if that thing is unset.

When the user is detected back inside the bounds it will unset it also.

    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
        }
    }

i was thinking possibly making an array like this

var alertSent = [];

and then if outside the geofence adding the users name to it

alertSent.push(name);

how would i check if the name exists in the array?

and how would i delete the name from the array when back inside the fence?

Upvotes: 0

Views: 1612

Answers (2)

Ridcully
Ridcully

Reputation: 23665

You could use an Object as an asociative array and use the names as keys and a boolean value for sent / not sent. alertSent[name] also evaluates to a falsy value if it doesn't contain name at all.

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;

Upvotes: 1

jamb
jamb

Reputation: 196

If you end up using array, then you have search it for every index till you find the string like

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

You can also think about, registering events and eventlisteners for handling this problem, it would be a better design.

Or you can also use hashmap kind of javascript implementation like using

alertSent["driver1"]=true;,

Lookup will be simple in this case just use ,

alertSent["driver1"]

to get the boolean value. But take care of array space in this case.

Upvotes: 1

Related Questions