【问题标题】:How to set location triggers dynamically in Worklight?如何在 Worklight 中动态设置位置触发器?
【发布时间】:2013-11-28 21:10:37
【问题描述】:

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

我已经看到了一组已建立位置的几个示例,但我不知道如何让它在我的场景中工作......

【问题讨论】:

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


    【解决方案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
        }
      };
    

    【讨论】:

      【解决方案2】:

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

      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】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-26
          相关资源
          最近更新 更多