我需要为从 Worklight 适配器获得的每个位置动态创建新的地理围栏圈。我需要使用循环来完成,因为我不知道后端服务中定义了多少位置。此外,可以在应用程序运行的同时定义一个新位置。
我已经看到了一组已建立位置的几个样本,但我不知道如何让它在我的场景中工作......
我需要为从 Worklight 适配器获得的每个位置动态创建新的地理围栏圈。我需要使用循环来完成,因为我不知道后端服务中定义了多少位置。此外,可以在应用程序运行的同时定义一个新位置。
我已经看到了一组已建立位置的几个样本,但我不知道如何让它在我的场景中工作......
我已经找到了解决方案。如果有人需要,这是代码:
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
}
};
这是添加动态位置触发器的最终结果:
*注意:vector 是一个 javascript 数组,其中包含不同地理围栏圈的纬度和经度*
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;
}
使用外部函数生成触发器:
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;
}