Vue2项目使用高德地图实现地图显示、标记以及获取坐标信息

1. 展示效果

在地图上标点之后,直接获得坐标以及具体位置信息:

https://lbs.amap.com/api/webservice/guide/api/georegeo”,这个网址中给出了地理编码以及逆编码的接口,可以直接调用。

2.注册高德key

进入高德控制台首页我的应用中添加两个KEY“https://console.amap.com/dev/index”;

如图所示:新建一个web端(JS API)和web服务key;

3.导入项目

在项目根目录下使用下载amap插件

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

在main.js中导入AMap插件,这里使用的key为前面申请的两个key中的web端的key;

4.在具体组件中实现获取具体位置信息功能

template定义:

//template
<template>
  <div id="MapContainer"></div>
</template>

data定义:

var map = {}  //地图对象
var marker = {}  //标记对象
const markers = []  //标记对象数组

export default {
  name: 'Map',
  props:{  //父组件传值 经纬度以及具体信息 需要做双向绑定
    storeroomLocation:{
      type:String
    },
    storeroomLongitude:{
      type:Number
    },
    storeroomLatitude:{
      type:Number
    }
  },
  data() {
    return {
      lng: '',
      lat: '',
      location:'',
      MapMsg:''
    }
  },
}

具体实现方法:

createdMap() {
      const that = this
      map = new AMap.Map('MapContainer', {
        zoom: 13,	//设置地图的缩放级别
        zooms: [8, 20],	//设置地图的缩放级别区间
        mapStyle: 'amap://styles/normal',		//设置地图的显示样式
        features: ['road', 'point',],  //设置地图的底图元素,缺少则显示全部元素,bg区域面、point兴趣点、road道路及道路标注、building建筑物
      })
      //绑定地图点击事件
      map.on('click', function (e) {
        map.remove(markers)
        const { lng, lat } = e.lnglat
        that.lng = lng
        that.lat = lat
        that.location = lng+','+lat
        // 创建一个 Marker 实例:  标记点信息
        var marker = new AMap.Marker({
          position: [lng, lat],   // 经纬度
          anchor: 'center',
          offset: new AMap.Pixel(0, 0),
          //创建一个自定义图标实例
          icon: new AMap.Icon({
            size: new AMap.Size(28, 30),    // 图标尺寸
            image: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',  // 自定义图像的url
            imageSize: new AMap.Size(27, 30)   // 根据所设置的大小拉伸或压缩图片
          }),
        })
        //只保留一个标记点
        markers.push(marker)
        map.add(marker)

      //  获取详细位置信息  web服务key
        const LocationObj = that.BatchLocationMsg({location:that.location,key:'xxxxxxxxxxxxxxxxxx'}) //此处的xxxx填写前面申请的web服务key
        LocationObj.then((res)=>{
          const {data} = res
          that.MapMsg = data.regeocode.formatted_address
          that.$emit('update:storeroomLocation',that.MapMsg)
          // console.log(typeof that.lng)
          that.$emit('update:storeroomLongitude',that.lng)
          that.$emit('update:storeroomLatitude',that.lat)
        })
      })
    },
    //restapi.amap.com/v3/geocode/
    BatchLocationMsg(params){
      return axios({
        url:'/amap/regeo',
        method:'GET',
        params:params
      })
      // getAction('/amap/regeo',params)
    }

5.注意事项

1.这块代码是对标发送请求获取具体信息的接口,因为产生了跨域问题 ,所以需要在vue.config.js中进行代理操作:

BatchLocationMsg(params){
      return axios({
        url:'/amap/regeo',
        method:'GET',
        params:params
      })

具体代理实现:

  devServer: {
    port: 3000,
    proxy: {
//添加下面的对象
      '/amap': {
        target: 'https://restapi.amap.com/v3/geocode/',
        changeOrigin: true,
        ws: true,
        pathRewrite: {
          '^/amap': ''
        }
      },
    }
  }

总结:主要注意两个点:

1.功能中包含了使用api的逆编码方法,所以需要使用web服务的key,在导入时使用的key为web端的key,需要使用两个;

2.在调用官方接口时,会产生跨域问题,需要在vue.config.js中进行代理操作。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue2中实现高德地图的多点标注,你可以按照以下步骤进行操作: 1. 在Vue组件中引入高德地图的API,可以通过在`<head>`标签中添加`<script>`标签来引入高德地图JavaScript API。 2. 在Vue组件中创建一个地图实例,可以使用`new AMap.Map`来实例化一个地图对象,并将其绑定到一个指定的DOM元素上。你可以使用以下代码创建地图实例: ```javascript map = new AMap.Map("container", { viewMode: "2D", zoom: 10, center: [83.28636635754393, 45.44533368853938], mapStyle: 'amap://styles/normal' }); ``` 这里的`"container"`是一个DOM元素的ID,表示地图将被渲染到该DOM元素中。 3. 在Vue组件中添加多个标记点,你可以使用`new AMap.Marker`来创建一个标记点对象,并将其添加到地图上。你需要为每个标记点指定一个位置(经纬度)和一个标记的图标。以下是一个添加标记点的示例代码: ```javascript marker1 = new AMap.Marker({ icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png", position: [116.406315, 39.908775], offset: new AMap.Pixel(-13, -30) }); marker2 = new AMap.Marker({ icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png", position: [经度, 纬度], offset: new AMap.Pixel(-13, -30) }); // 依次添加标记点到地图上 marker1.setMap(map); marker2.setMap(map); ``` 这里的`icon`表示标记点的图标,`position`表示标记点的位置(经纬度),`offset`表示标记点图标相对于位置的偏移量。 4. 最后,在Vue组件中显示地图标记点。你可以在模板中添加一个包含地图的DOM元素,并将其样式设置为适当的大小。例如: ```html <template> <div id="map-container"></div> </template> <style> #map-container { width: 100%; height: 400px; } </style> ``` 这里的`map-container`是地图容器的ID,通过设置其宽度和高度来控制地图的大小。 通过按照以上步骤操作,你就可以在Vue2中实现高德地图的多点标注了。记得先引入高德地图的API,然后创建地图实例,并添加标记点到地图上。最后,在模板中显示地图容器即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [vue3实现高德地图多点标注(so easy)](https://blog.csdn.net/dyk11111/article/details/131002815)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值