问题
I need to create new geofence circles dynamically for each location I get from a Worklight Adapter. I need to do it using a loop, as I dunno how many locations are defined in backend service. Furthermore a new location can be define meanwhile the application is running.
I have seen several samples for an established set of locations but I dunno how to get it working in my scenario...
回答1:
I have already found a solution. This is the code in case someone needs it:
var triggers = new Object();
triggers.Geo={};
triggers.Geo.Cliente = {
type: "Enter",
circle: {
longitude: xxxxxx,
latitude: xxxxxxx,
radius: proximidad // 300m
},
confidenceLevel: "high", // ~95% confidence that we are in the circle
eventToTransmit: {
event: {
name: 'clientecerca'
},
transmitImmediately: true
}
};
回答2:
Generating Triggers using an external function:
var triggers = new Object();
triggers.Geo={};
triggers.Geo.Cliente = generaTriggers("41.43373","-3.80052");
function generaTriggers(lat,lon){
var Cliente ={
type: "Enter",
circle: {
longitude: lon,
latitude: lat,
radius: proximidad // 300m
},
confidenceLevel: "high", // ~95% confidence that we are in the circle
eventToTransmit: {
event: {
name: 'clientecerca'
},
transmitImmediately: true
}
};
return Cliente;
}
回答3:
This is the final result for adding dynamically location triggers:
*Note: vector is a javascript array that contains the latitude and longitude of the different geofences circles*
function Geofencing(){
var policy = { Geo: WL.Device.Geo.Profiles.LiveTracking() };
var triggers = new Object();
triggers.Geo={};
var triggersgenerados = generaTriggers();
triggers.Geo = triggersgenerados;
WL.Device.startAcquisition(policy, triggers, geoFailure);
WL.App.setKeepAliveInBackground(true);
}
function generaTriggers(){
var triggersvisitas= new Object;
for(var i=0; i< vector.length;i++){
var Cliente ={
type: "Enter",
circle: {
longitude: vector[i].longitud,
latitude: vector[i].latitud,
radius: proximidad // 300m
},
confidenceLevel: "high",
eventToTransmit: {
event: {
name: 'clientecerca'
},
transmitImmediately: true
}
};
triggersvisitas["Cliente"+i]=Cliente;
}
return triggersvisitas;
}
来源:https://stackoverflow.com/questions/20274792/how-to-set-location-triggers-dynamically-in-worklight