Vue|高德地图在 vue 项目中的使用

高德地图在 vue 项目中的使用 一、创建高德账号,申请key

  1. 【Vue|高德地图在 vue 项目中的使用】登陆高德地图的官网,进行登录,如果没有账号的话,就注册账号
    Vue|高德地图在 vue 项目中的使用
    文章图片

  2. 注册之后,点击控制台进入,进去之后,我们点击应用管理 -> 我的应用 -> 创建应用
    Vue|高德地图在 vue 项目中的使用
    文章图片

  3. 点击添加,增加key
    Vue|高德地图在 vue 项目中的使用
    文章图片

二、高德地图在vue项目中引入
  1. 采用异步加载方式,项目中 utils 目录下创建 loadAMap.js
export fucntion loadAMap () { return new Promise((reslove, reject) => { if(window.AMap) reslove() window.init = funciton (){ reslove() } const script = document.createElement('script') script.type = 'text/javascript' script.src = 'https://www.it610.com//webapi.amap.com/maps?v=1.4.15&key=申请的key&plugin=用到的服务&callback=init' script.onerror = reject document.head.appendChild(script) }) }

  1. 在需要使用高德地图的界面,引入loadAMap 方法,在界面初始化时(create,mount…),调用方法加载地图
import { laodAMap } from '@/utils/loadAMap' ...... mounted () { laodAMap().then(() => { this.map = new AMap.Map('map',{ resizeEnable: true, zoom:11 }) }).catch(err => { console.log('err', err) console.log('高德地图加载失败') }) }

高德地图常用插件使用 1.点击地图增加标记点,并展示信息弹框
使用插件: AMap.Marker, AMap.InfoWindow, AMap.Geocoder
mounted () { ...... //地图加载完毕后 // 地理编码与逆地理编码类,用于地址描述与坐标之间的转换 this.geocoder = new AMap.Geocoder() // 用于在地图上弹出一个详细信息展示窗体 this.infoWindow = new AMap.InfoWindow({ isCustom: false, autoMove: true, offset: new AMap.Pixel(-10, -43) }) // 地图绑定点击事件 this.map.on('click', (event) => { this.addMrker(event.lnglat) }) ...... }, methods:{ // 地图点击增加标记点 addMrker (position) { const _this = this // 根据点击位置经纬度查询详细信息 this.geocoder.getAddress([position.lng, position.lat], (status, result) => { if (status === 'complete' && result.info === 'OK') { this.map.clearInfoWindow() const marker = new AMap.Marker({ map: _this.map, position: new AMap.LngLat(position.lng, position.lat), size: new AMap.Size(60, 26), offset: new AMap.Pixel(-10, -33), extData: result.regeocode // 信息窗展示信息 }) // 点击marker展示信息弹框 marker.on('click', (e) => { _this.addInfowindow(marker) }) _this.map.add(marker) marker.setMap(_this.map) } }) }, // 添加信息窗 addInfowindow (marker) { console.log(marker) const positionInfo = marker.getExtData() // 信息窗内容样式(自定义) const WindowDOM = Vue.extend({ render: h => { return ({positionInfo.formattedAddress}
{positionInfo.addressComponent.province}{positionInfo.addressComponent.city}{positionInfo.addressComponent.district}{positionInfo.addressComponent.street}
this.infoWindowHandler(positionInfo)}>设为起点 {positionInfo.type === 'tail' ?this.infoWindowHandler(positionInfo)}>设为目的地 : ''}
) } }) const component = (new WindowDOM()).$mount() this.infoWindow.setContent(component.$el) this.infoWindow.open(this.map, marker.getPosition()) this.map.setCenter(marker.getPosition()) }, }

2.集成高德地图POI查询功能
使用插件: AMap.Marker, AMap.InfoWindow, AMap.Geocoder,AMap.PlaceSearch
...... methods:{ ...... // 搜索点击事件 searchClick () { console.log('== searchClick ==') if (!this.queryForm.address) return false this.getPOIList(this.queryForm.address) }, // 调用高德地图 PlaceSearch 方法,获取位置信息列表 getPOIList (keywords) { const _this = this // 查询条件可以为动态数据 this.POISearch = new AMap.PlaceSearch({ // city: city, // 搜索城市 // citylimit: true, // 限制搜索城市 extensions: 'all' // type: category, // 服务列表 // pageSize: page.pageSize, // 每页显示条数 // pageIndex: params.page.pageNum // 当前页 }) this.POISearch.search(keywords, (status, res) => { console.log(status, res) if (status === 'complete' && res.info === 'OK') { _this.POIList = res.poiList.pois console.log(_this.POIList) _this.addPOIMarker(_this.POIList) } }) }, // POI数据打点 addPOIMarker (POIList) { POIList.forEach((item, index) => { // const marker = new AMap.Marker({ map: this.map, icon: require('@/assets/' + (index + 1) + '.png'), position: [item.location.lng, item.location.lat], size: new AMap.Size(21, 32) }) marker.on('click', () => { this.showPOIInfo(item) }) this.POIMarkers.push(marker) }) this.map.setFitView(null, true, [100, 100, 100, 450]) }, // 显示POIinfo弹框 showPOIInfo (value) { const address = value.pname + value.cityname + value.adname + value.address const content = ` ${value.name} 地址: ${address}
电话: ${value.tel}
` this.POIInfoWindow.setContent(content) this.POIInfoWindow.open(this.map, [value.location.lng, value.location.lat]) this.map.setCenter([value.location.lng, value.location.lat]) this.map.panBy(-185, 0) }, ...... }

Vue|高德地图在 vue 项目中的使用
文章图片
参考文章
  1. 高德地图自定义消息窗体
  2. 高德官网

    推荐阅读