当前位置:   article > 正文

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

vue高德地图显示坐标名字

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定义:

  1. //template
  2. <template>
  3. <div id="MapContainer"></div>
  4. </template>

data定义:

  1. var map = {} //地图对象
  2. var marker = {} //标记对象
  3. const markers = [] //标记对象数组
  4. export default {
  5. name: 'Map',
  6. props:{ //父组件传值 经纬度以及具体信息 需要做双向绑定
  7. storeroomLocation:{
  8. type:String
  9. },
  10. storeroomLongitude:{
  11. type:Number
  12. },
  13. storeroomLatitude:{
  14. type:Number
  15. }
  16. },
  17. data() {
  18. return {
  19. lng: '',
  20. lat: '',
  21. location:'',
  22. MapMsg:''
  23. }
  24. },
  25. }

具体实现方法:

  1. createdMap() {
  2. const that = this
  3. map = new AMap.Map('MapContainer', {
  4. zoom: 13, //设置地图的缩放级别
  5. zooms: [8, 20], //设置地图的缩放级别区间
  6. mapStyle: 'amap://styles/normal', //设置地图的显示样式
  7. features: ['road', 'point',], //设置地图的底图元素,缺少则显示全部元素,bg区域面、point兴趣点、road道路及道路标注、building建筑物
  8. })
  9. //绑定地图点击事件
  10. map.on('click', function (e) {
  11. map.remove(markers)
  12. const { lng, lat } = e.lnglat
  13. that.lng = lng
  14. that.lat = lat
  15. that.location = lng+','+lat
  16. // 创建一个 Marker 实例: 标记点信息
  17. var marker = new AMap.Marker({
  18. position: [lng, lat], // 经纬度
  19. anchor: 'center',
  20. offset: new AMap.Pixel(0, 0),
  21. //创建一个自定义图标实例
  22. icon: new AMap.Icon({
  23. size: new AMap.Size(28, 30), // 图标尺寸
  24. image: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png', // 自定义图像的url
  25. imageSize: new AMap.Size(27, 30) // 根据所设置的大小拉伸或压缩图片
  26. }),
  27. })
  28. //只保留一个标记点
  29. markers.push(marker)
  30. map.add(marker)
  31. // 获取详细位置信息 web服务key
  32. const LocationObj = that.BatchLocationMsg({location:that.location,key:'xxxxxxxxxxxxxxxxxx'}) //此处的xxxx填写前面申请的web服务key
  33. LocationObj.then((res)=>{
  34. const {data} = res
  35. that.MapMsg = data.regeocode.formatted_address
  36. that.$emit('update:storeroomLocation',that.MapMsg)
  37. // console.log(typeof that.lng)
  38. that.$emit('update:storeroomLongitude',that.lng)
  39. that.$emit('update:storeroomLatitude',that.lat)
  40. })
  41. })
  42. },
  43. //restapi.amap.com/v3/geocode/
  44. BatchLocationMsg(params){
  45. return axios({
  46. url:'/amap/regeo',
  47. method:'GET',
  48. params:params
  49. })
  50. // getAction('/amap/regeo',params)
  51. }

5.注意事项

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

  1. BatchLocationMsg(params){
  2. return axios({
  3. url:'/amap/regeo',
  4. method:'GET',
  5. params:params
  6. })

具体代理实现:

  1. devServer: {
  2. port: 3000,
  3. proxy: {
  4. //添加下面的对象
  5. '/amap': {
  6. target: 'https://restapi.amap.com/v3/geocode/',
  7. changeOrigin: true,
  8. ws: true,
  9. pathRewrite: {
  10. '^/amap': ''
  11. }
  12. },
  13. }
  14. }

总结:主要注意两个点:

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/108913?site
推荐阅读
相关标签
  

闽ICP备14008679号