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

一、创建高德账号,申请key

  1. 登陆高德地图的官网,进行登录,如果没有账号的话,就注册账号

    账号注册

  2. 注册之后,点击控制台进入,进去之后,我们点击应用管理 -> 我的应用 -> 创建应用


    创建应用
  3. 点击添加,增加key


    创建应用

二、高德地图在vue项目中引入

  1. 采用异步加载方式,项目中 utils 目录下创建 loadAMap.js
  export function loadAMap () {
    return new Promise((resolve, reject) => {
      if(window.AMap) resolve()
      window.init = funciton (){
        resolve()
      }
      const script = document.createElement('script')
      script.type = 'text/javascript'
      script.src = '//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)
  })
  ......
},
method:{
  // 地图点击增加标记点
  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 (<div style='min-width: 220px;'>
          <p style='margin: 10px 0px 0px 0px;font-size:14px;'><b>{positionInfo.formattedAddress}</b></p>
          <p style='margin: 5px 0px 0px 0px;font-size:14px;'><span>{positionInfo.addressComponent.province}{positionInfo.addressComponent.city}{positionInfo.addressComponent.district}{positionInfo.addressComponent.street}</span></p>
          <p style='margin: 5px 0px 0px 0px;font-size:14px;'>
            <a style='color:#1e346e;font-size:14px;text-decoration:underline;' onClick={() => this.infoWindowHandler(positionInfo)}>设为起点</a>
            {positionInfo.type === 'tail' ? <a style='color:#1e346e;font-size:14px;text-decoration:underline;margin-left:10px' onClick={() => this.infoWindowHandler(positionInfo)}>设为目的地</a> : ''}
          </p>
        </div>)
      }
    })
    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.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 = `
   <div class="title"> ${value.name} </div>
   <div class="content">
     <p>地址: ${address} </p>
     <p>电话: ${value.tel} </p>
   </div>`
   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)
 },
 ......
}
实例展示

参考文章

  1. 高德地图自定义消息窗体
  2. 高德官网
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342