如何在Worklight中动态设置位置触发器?

时间:2013-11-28 21:10:38

标签: triggers location ibm-mobilefirst geofencing worklight-geolocation

我需要为从Worklight Adapter获得的每个位置动态创建新的地理围栏圈。我需要使用循环来完成它,因为我不知道在后端服务中定义了多少个位置。此外,可以在应用程序运行的同时定义新位置。

我已经看到了一些既定地点的几个样本,但我不知道如何让它在我的场景中运行......

3 个答案:

答案 0 :(得分:1)

我已经找到了解决方案。这是代码,以防有人需要它:

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

答案 1 :(得分:0)

使用外部函数生成触发器:

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

答案 2 :(得分:0)

这是添加动态位置触发器的最终结果:

* 注意: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;
}