Google_Map_fence_set 谷歌地图多(出入报警)围栏(附评价):

1.运行

* git clone ;
* npm install
* $ gulp;
* 替换自己的key值。V3版本。

2.项目说明

2.1 围栏渲染

  this.fences = opts.fences;

  //我这里模拟里一些围栏的数据
  this.fences = [{
    alarmType: 1,
    center: [
      { lng: 116.336691, lat: 40.006788 }
    ],
    fenceName: '围栏1',
    radius: 10000,
    shapeType: 0
  }, {
    alarmType: 0,
    center: [
      { lng: 116.336691, lat: 40.106788 },
      { lng: 116.336691, lat: 40.207299 },
      { lng: 116.536691, lat: 40.207299 },
      { lng: 116.536691, lat: 40.106788 },
    ],
    fenceName: '围栏2',
    radius: null,
    shapeType: 1
  }, ];
  for (var i = 0; i < me.fences.length; i++) {
    // 多边形展示
    if (me.fences[i].shapeType == 1) {
      me.f_show_duo(me.fences[i]);
    }
    // 圆形展示
    else if (me.fences[i].shapeType == 0){
      me.f_show_yuan(me.fences[i]);
    }
  }

2.2 新增围栏

  var type = me.shapeType = $('#type input[name="type"]:checked').val();
  if (type == 0) {
    me.f_add_yuan();
  }
  // 多边形
  else if (type == 1) {
    //baidu:layer.msg('温馨提示:结束多边形绘制,请双击鼠标!');
    me.f_add_duo();
  }

2.3 保存数据

  f_add_done: function(argument) {
    var me = this;
    me.drawingManager.addEventListener('overlaycomplete', function(e) {
      me.drawingManager.close();
      // 围栏报警参数
      e.overlay.alarmType = me.alarmType;
      // 围栏的形状参数
      e.overlay.shapeType = me.shapeType;
      // 围栏名称
      e.overlay.fenceName = me.fenceName;

      me.f_all();
    });
  },
  // 所有围栏的事件
  f_all: function() {
    /* body... */
    var me = this;
    var all_f = me.map.getOverlays();
    // 显示信息事件
    me.f_mouseover(all_f);
    // 所有围栏的点击事件
    me.f_click(all_f);
    // 向后台发数据的事件
    me.f_send(all_f);
  },

2.4 收集所有

    // 这里需要注意,百度地图有获取页面所有的覆盖物的API,google没有,我需要自己定义一个类ID的唯一标识
    // 围栏的唯一标识
    this.f_id = 0;
    // 全局围栏数组
    this.f_arrs = [];

  var all_f = me.map.getOverlays();
  me.f_send(all_f);

2.5 信息提示

  f_show_e: function(argument) {
    /* body... */
    var me = this;
    var all_f = me.map.getOverlays();
    // 显示信息事件
    me.f_mouseover(all_f);
    // 所有围栏的点击事件
    me.f_click(all_f);
  },
  f_mouseover: function(arr) {
    var me = this;
    for (var i = 0; i < arr.length; i++) {
      arr[i].removeEventListener('mouseover');
      arr[i].addEventListener('mouseover', function(e) {
        var str = '';
        if (e.target.alarmType == 1) {
          str = '出围栏报警';
        } else {
          str = '入围栏报警';
        }
        e.target.indexLayer = layer.msg('围栏名称:' + e.target.fenceName + '<span style="margin-left:20px;"></span>报警条件:' + str, {
          time: 0, //不自动关闭
        });
      });
      arr[i].removeEventListener('mouseout');
      arr[i].addEventListener('mouseout', function(e) {
        layer.close(e.target.indexLayer);
      });
    }
  },

3.设计思想

4.使用感受