高德地图准备工作
安装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)
})
})
}
}
}