How to set location triggers dynamically in Worklight?

别等时光非礼了梦想. 提交于 2019-12-11 21:54:38

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!