vue高德地图多边形覆盖区

发布时间 2023-09-13 12:37:30作者: 刘国微

高德地图准备工作

安装amap

cnpm国内安装比npm更快些;

cnpm install vue-amap --save

main.js

配置amap的基础配置项

import GaodeMap from 'vue-amap'
Vue.use(GaodeMap)
GaodeMap.initAMapApiLoader({
    key: 'testkey', // 这里填写你申请的key
    plugin: ['AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PlaceSearch', 'AMap.Geolocation', 'AMap.Geocoder'], // 使用到的工具
    v: '1.4.4', // 版本号
    uiVersion: '1.0'
})

.eslintrc.js

 插入全局变量防止报错,如下代码

globals: {
    AMap: true,
    AMapUI: true
}

行政区覆盖

HTML部分代码

 <template>
  <el-amap ref="map" style="width:100vw;height:100vh" />
</template>

JavaScript部分代码

export default {
  name: 'Map',
  data(){
    return {}
  },
  mounted() {
    // 具体数据覆盖根据实际需求调整(注意如果要根据areacode查询,该字段必须设置为字符串类型)
    this.loadMap([{name:'北京',areacode:'110000'},{name:'天津',areacode:'120000'}])
  },
  methods: {
    loadMap(data){
      this.$nextTick(() => {
        var map = this.$refs.map.$$getInstance() // 获取地图实例
        if(map){
          map.setZoom(6) // 设置缩放等级
          map.setStatus({zoomEnable: false}) // 禁用缩放
          map.setFeatures(['point', 'bg']) // 设置显示覆盖物
          AMap.service(['AMap.DistrictSearch'], () => {
            var district = new AMap.DistrictSearch({
              showbiz: false, // 禁用商圈返回,提升覆盖速度
              subdistrict: 0, // 获取边界不需要返回下级行政区
              extensions: 'all', // 返回行政区边界坐标组等具体信息
              level: 'province' // 查询行政级别为省
            })
            data.forEach((row) => {
              var polygons = []
              // 注意使用的areacode必须是字符串类型
              district.search(row.areacode, (status, result) => {
                var bounds = result.districtList[0].boundaries // 获取边界
                if (bounds) {
                  for (var i = 0, l = bounds.length; i < l; i++) {
                    // 生成行政区划polygon
                    var polygon = new AMap.Polygon({
                      strokeWeight: 1,
                      path: bounds[i],
                      fillOpacity: 0.4,
                      fillColor: '#80d8ff',
                      strokeColor: '#0091ea'
                    })
                    // 触碰事件
                    polygon.on('mouseover', () => {
                      polygon.setOptions({
                        fillOpacity: 0.7,
                        fillColor: '#80d8ff'
                      })
                    })
                    // 点击事件
                    polygon.on('click', () => {
                      console.log('点击了行政区')
                    })
                     // 移开事件
                    polygon.on('mouseout', () => {
                      polygon.setOptions({
                        fillOpacity: 0.4,
                        fillColor: '#80d8ff'
                      })
                    })
                    polygons.push(polygon)
                  }
                }
                // 将多边形添加到地图上
                map.add(polygons)
              })
            })
          })
        }
        // 防止出现地图加载慢,获取不到对象问题
        setTimeout(()=>{
          this.loadMap(data)
        })
      })
    }
  }
}