vue高德电子围栏

npm i @amap/amap-jsapi-loader --save

<template>

  <div class="index">

    <a-button type="primary" @click="drawRectangle">绘制多边形</a-button>

    <!-- <a-button type="primary" @click="editRectangle">编辑多边形</a-button>

    <a-button type="primary" @click="deleRectangle">删除多边形</a-button> -->

    <a-button type="primary" @click="endRectangle">完成</a-button>

    <div id="amapContainer"></div>

    <!-- 编辑模块 -->

  </div>

</template>

<script>

import AMapLoader from '@amap/amap-jsapi-loader'

export default {

  name: 'polys',

  data () {

    return {

      map: null,

      polyEditor: null,

      path1: [[116.475334, 39.997534], [116.476627, 39.998315], [116.478603, 39.99879], [116.478529, 40.000296], [116.475082, 40.000151], [116.473421, 39.998717]],

      polyEditorBox: [{

        name: '那个地方',

        path: [[116.475334, 39.997534], [116.476627, 39.998315], [116.478603, 39.99879], [116.478529, 40.000296], [116.475082, 40.000151], [116.473421, 39.998717]],

      }],

      polys: [

        { path: [[116.474595, 40.001321], [116.473526, 39.999865], [116.476284, 40.000917]], extData: { name: '这是赣州区1' } },

        { path: [[116.470994, 39.998148], [116.474668, 39.999211], [116.474128, 39.997381]], extData: { name: '这是赣州区2' } }

      ],

      // 当前表单元素

      form: this.$form.createForm(this),

      labelCol: {

        span: 2

      },

      // 输入框布局属性

      wrapperCol: {

        span: 13

      },

      // 角色列表 树状结构

      roleListTreeData: [],

      roleList: []

    }

  },

  methods: {

    initMap () {

      let that = this

      AMapLoader.load({

        key: '', // 申请好的Web端开发者Key,首次调用 load 时必填

        version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15

        plugins: ['AMap.PolygonEditor', 'AMap.Polygon', 'AMap.InfoWindow', 'AMap.Pixel'] // 需要使用的的插件列表,如比例尺'AMap.Scale'等

      }).then((AMap) => {

        this.map = new AMap.Map('amapContainer', { // 设置地图容器id

            viewMode: '3D', // 是否为3D地图模式

            zoom: 16.8, // 初始化地图级别

            center: [116.471354, 39.994257] // 初始化地图中心点位置

          })

        this.map.setFitView()

        this.polyEditor = new AMap.PolygonEditor(this.map)

        this.polys.forEach(element => {

            var polygon1 = new AMap.Polygon({

              path: element.path,

              extData: element.extData

            })

             polygon1.on('dblclick', () => {

              this.polyEditor.setTarget(polygon1)

              // this.polyEditor.getTarget()._opts.fillColor = "#232323"

              const position = this.polyEditor.getTarget()._opts.path[0]

              this.map.setFitView([polygon1])

              var infoWindow = new AMap.InfoWindow({

                position: position,

                offset: new AMap.Pixel(0, -5),

                content: '<div>已获取' + this.polyEditor.getTarget()._opts.extData.name + '覆盖物</div>'

              })

              infoWindow.open(this.map)

              console.log(this.polyEditor.getTarget())

            })

            this.map.add([polygon1])

          })

        this.polyEditor.on('add', (data) => {

          var polygon = data.target

          console.log(polygon._opts)

          console.log(polygon._opts.strokeColor = '#576')

          console.log(polygon.getPath(), 'polygon')

            this.polyEditor.addAdsorbPolygons(polygon)

            polygon.on('dblclick', () => {

              this.polyEditor.setTarget(polygon)

              this.polyEditor.open()

            })

        })

          }).catch(e => {

              console.log(e)

          })

      },

    drawRectangle () {

      this.polyEditor.close()

      this.polyEditor.setTarget()

      this.polyEditor.open()

    },

    endRectangle () {

      this.polyEditor.close()

      let edits = this.polyEditor.getTarget()

      const { path, extData } = edits._opts

      edits._opts.extData = { id: 234234 }

      console.log(path, extData)

      this.polys.push({ path: path, extData: extData })

      console.log(this.polys)

    }

  },

  mounted () {

    // DOM初始化完成进行地图初始化

    this.initMap()

    // 角色列表

    this.getRoleList()

  },

  components: {

    SelectRegion,

    formPoly

  }

}

</script>

<style lang="less" scoped>

#amapContainer {

  height: 500px;

  width: 100%;

}

</style>

Vue是一个流行的JavaScript框架,可以用于构建用户界面。高德地图是一种流行的地图服务,它提供了丰富的地图功能和API。电子围栏是一种边界区域,当特定的设备或人员进入或离开该区域时会触发警报或其他特定操作。 在Vue中使用高德地图电子围栏,首先需要在Vue项目中引入高德地图的JavaScript API,可以通过在index.html文件中引入相应的脚本来实现,然后在组件中使用Vue的生命周期钩子函数进行初始化和销毁。 在组件中,我们可以使用高德地图的API创建一个地图实例,并设置地图的中心点和缩放级别。然后,我们可以使用地图的绘图工具来创建电子围栏的多边形或圆形,可以通过监听绘图结束事件来获取围栏的坐标信息。 接下来,我们可以使用高德地图的围栏服务API来创建电子围栏。可以通过调用相应的方法,传入围栏的名称、坐标信息和其他参数来创建电子围栏。可以根据需求设置围栏的类型,如圆形、多边形等,以及警报触发的条件和动作。 在Vue中,可以通过使用指令或绑定事件来实现与电子围栏的交互。可以使用v-on指令来监听电子围栏的进入或离开事件,并触发相应的方法或动作。可以在方法中实现警报、通知或其他功能,以响应电子围栏的状态变化。 总之,Vue高德地图电子围栏可以通过使用高德地图的API和Vue的生命周期钩子函数,实现在Vue项目中创建和管理电子围栏及其交互的功能。通过结合Vue的灵活性和高德地图的丰富功能,可以实现各种场景下的电子围栏应用。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值