使用VUE-amap做的第一个项目

人生做的第一个商业项目,在师兄的带领下都没有使用过vue-amap的情况下,一边学习一边完成需求,期间遇到了各种问题,上网搜索发现有些方案不满足需求,或者根本没有对应的解决方案等等。项目接近尾声,想写个博客一来总结经验,二来希望能给其他通过vue-amap做项目的人提供一些帮助,毕竟当初我们也是疯狂上百度搜索资料来解决问题。东西比较零碎,第一次写博客,不足之处望海涵。
vue-amap官网
高德地图官网

地图的实例化

想要使用高德地图,首先得去高德地图开放平台去申请一个key码,类似于玩游戏激活码,如果是企业级需求就根据申请中的相应选项进行申请,流程很快也很方便。
key值申请

下载插件的命令行

npm run vue-amap --save
yarn add vue-amap

下载插件后,在src的main.js文件中引入

import VueAMap from 'vue-amap';Vue.use(VueAMap);
VueAMap.initAMapApiLoader({key: 'YOUR_KEY', //申请的key码需要填写的地方,格式为长串字符数字plugin: [//按照你的需要,引入地图的哪些功能,不需要下面这么多"AMap.Autocomplete", //输入提示插件"AMap.PlaceSearch", //POI搜索插件"AMap.Scale", //右下角缩略图插件 比例尺"AMap.OverView", //地图鹰眼插件"AMap.ToolBar", //地图工具条"AMap.MapType", //类别切换控件,实现默认图层与卫星图、实施交通图层之间切换的控制"AMap.PolyEditor", //编辑 折线多,边形"AMap.CircleEditor", //圆形编辑器插件"AMap.Geolocation" //定位控件,用来获取和展示用户主机所在的经纬度位置],v: '1.4.4' // 默认高德 sdk 版本为 1.4.4
});

使用地图标签之前需要新建地图画布,比如在你的HellowWord.vue里面

<script>
import { AMapManager } from "vue-amap";
let amapManager = new AMapManager();
// 新建生成地图画布,紧接着下面el-amap标签中有一个属性值需要它
</script>

地图的属性和样式设置

下面绑定的属性,amapManager,mapEvents,markerCenter都需要你自己去data()里声明

<el-amapref="map"vid="amapDemo"//地图独特的id属性viewMode="3D"//启动3D地图:amap-manager="amapManager"//这个就是你前面新建画布要用到的地方:events="mapEvents"//你在高德地图开放者平台自己整的地图样式:center="markerCenter" //地图初始化中心点expandZoomRange="true"//允许缩放:zoom="zoom" //地图缩放倍数,[3,18],18放大最高级:plugin="plugins"//地图些功在这里声明,如比例尺功能:pitch="66"//地图刚进去的俯视角度rotateEnable="true"//鼠标点击右键可以旋转地图>
</el-amap>

显示地图的最后一步,给地图一个样式

.amap-demo {position: fixed;width: 100%;left: 0;right: 0;top: 0;bottom: 0;}

到这里,已经能基本实现地图的显示了,接下来回忆一下项目中我个人总结的一些需要注意的地方

1.我们的项目需求3D地图,vue-amap文档没有相关这个3D属性的说明,最后是在高德开放平台的官方文档中找到的。所以如果你有些属性没有头绪,可以去高德地图开放平台寻找思路。
有了viewMode="3D"属性的前提下,rotateEnable="true"才有效果,来实现3D旋转。一开始我本末倒置,浪费了好多时间才发现。

2.可能你对地图本身的样式有一些需求,你在高德地图开放者平台上找到自定义地图进行相关地图属性的配置后
看到下面的使用和分享了吗,点击后会跳转到一个新界面,找到位置靠下面的“在线调用地图样式”,有一个“amap://styles/”很长的属性值,比如我的

amap://styles/f08714e2c633e8cc2480e3fdca11f520

在data()中保存样式值,通过:events="mapEvents"引用,然后在data()里面初始化并定义。就可以实现你想要的效果了。

export default {name: "HelloWorld",data() {return {mapEvents: {init(o) {o.setMapStyle("amap://styles/f08714e2c633e8cc2480e3fdca11f520"); //自定义的高德地图的样式}},currentWindow: {position: [119.72407, 30.25808],content: "123",events: "",visible: false},

如果你对地图样式有修改,样式值是不会更改的,在开放者平台上点击保存发布,你的地图就可以接收到这个更新的地图样式了。没有这方面的需求不需要设置这个属性即可。

3.在el-amap标签里,你可以放置多个el-amap-marker对象,让他们遍历不同的数据,里面镶嵌不同的图片,点击触发不同的window信息框

el-amap-maker的简单使用

<el-amap-markerv-for="(marker, index) in List"//循环生成List数组里所有的点:position="marker.position"//格式得是数组,如[120,30]:key="index"//marker没有key是不行的!没有key是不行的!//上面两个是必须的属性,下面两个可选:offset="[-100, -220]"//设置marker标注偏移量:events="marker.events"//点击标注触发的点击事件
><div>//放一些东西,比如img,就可以实现自定义标注的效果,<img :src="marker.img" alt /></div>
</el-amap-marker>

你的遍历对象List应该是这样的格式,你的模拟坐标大小应该合理,别挤在一个点,也不要缩放到大洲的程度才都看到

data(){return{List: {position: [[119.72899, 30.254775],[119.72895, 30.254775],[119.72891, 30.254775],[119.72886, 30.254775]]}

el-amap-info-window的简单使用

<el-amap-info-window
//data()里写一个window对象,:position="window.position"//信息框位置,格式[120,30]:visible="window.visible"//控制是否可见,通过点击点坐标控制:content="window.content"//信息框内容:offset="[0, -14]"//信息框的偏移量,上下左右啊飘啊飘
></el-amap-info-window>

我们marker和点击触发的window的效果如图

点坐标示例与信息窗口

切记,一定一定一定请给你的marker添加index。
切记,一定一定一定请给你的marker添加index。
切记,一定一定一定请给你的marker添加index。

多嘴一句,有关地图的所有标签都要填在el-amap标签内部,比如el-amap-marker,el-amap-info-window,不然起不了作用。
el-amap-info-window和el-amap-marker可以照着vue-amap官网上的案例来修改,简单快捷,非常方便。

记录有一个花了我们很久时间的一个难题。想要在3D地图上添加静态的东西,不随你鼠标点击移动而移动,我们先后使用maker标注和地图覆盖物,并且很多网上的其他方法,最后发现,配合maker标注的:offset,即可实现当你移动地图的时候点标注不移动,标注里面放点img之类的标签,就实现需求了。也是因为之前用了这个方法但没弄明白,回头继续研究这个方法才发现可行,花了很多时间。

<el-amap-markerv-for="(marker, index) in markers":key="index"
></el-amap-marker>

如果你往标注里放一些大一点图片,你会发现移动鼠标调整视角的位置,这么大一个图片绕一个点转,图片动得很违和。
问题这么描述,大家也应该清楚如何解决了,把图片的中心,偏移到图片旋转的位置。原理是,图片以左上角为中心点旋转,所以设置:offset="[x, y]",合适比例的大小(根据你的图片宽高设置),将旋转中心调整为图片的中心即可解决问题。

差不对就是这么多了,希望对各位能有一点点的帮助!

VUE-amap遇到的坑和总结相关推荐

  1. 【大屏】 amap + echarts 踩坑以及避免办法

    amap + echarts 踩坑以及避免办法 大屏 踩坑 代码 大屏 html,body,#container { margin: 0; padding: 0; width: 5376px; hei ...

  2. vue v-html scoped,基于vue中的scoped坑点解说

    今天在覆盖iview组件样式的时候发现一个问题,就是无法覆盖组件原有的样式,最后在github的issue中找到了答案: 不要使用scoped属性.于是我查找了下关于scoped的文章. 我们假设把这 ...

  3. VS2017+VUE创建项目爬坑

    以下内容适用于一直在用VS做项目,突然接到vue.js需要使用VSCode并且不想用的旁友. 在开始之前,需要安装Node.js编辑器,可以参考这篇文章,这里不再赘述. https://blog.cs ...

  4. Vue中的深坑——component和components

    废话不多说,直接上代码 <!DOCTYPE html> <html lang="en"> <head><meta charset=&quo ...

  5. vue移动端深坑之微信浏览器相关优化方案

    目前微信浏览器对前端还是比较友好的,最近正在搞的一个项目,同一个页面在iOS的夸克浏览器中页面会因为软键盘的弹出莫名其妙的移位,因为用了fixed布局,目前还没有解决,等有时间再优化适配吧毕竟微信浏览 ...

  6. vue 微信支付的坑_Vue实现微信支付功能遇到的坑

    微信支付功能相比较支付宝支付,有点点繁琐,整理记录下来,以便日后所需 项目用VUE+EL搭建而成,支付用EL的radio来做的 微信支付 推荐安装最新版微信使用 支付宝 推荐有支付宝账户的用户使用 坑 ...

  7. H5跳转微信小程序-成功案例(VUE)(踩坑无数)

    这里写自定义目录标题 准备工作 根据官方提供的资料需准备以下几点: 1.已认证的服务号 2.绑定JS接口安全域名 (在微信公众平台设置) 3.IP白名单 (在微信公众平台设置) 4.将小程序和H5公众 ...

  8. Vue中的的坑(二)——组件的包裹:div

    废话不多说,直接先上代码 <!DOCTYPE html> <html lang="en"> <head><meta charset=&qu ...

  9. computed vue 不 触发_vuejs render何时执行?以及使用vue.$refs遇到的坑。

    vue框架什么时候处理computed属性的? 在beforeCreate和created两个生命周期之间,初始化以及挂载computed里面的属性,就是说在created钩子里面时候,可以通过thi ...

  10. idea启动前端vue项目(各种坑)

    在idea中安装vue插件 搜索不到vue的可以看这个解决方案 安装成功重启idea 点击Treminal 输入命令安装依赖初始化: npm install 出现npm不是内部或外部命令 解决方案: ...

最新文章

  1. java安卓的xml布局,android – 将xml布局更改为java代码
  2. 韩顺平轻松搞定网页设计(html+css+js),韩顺平轻松搞定网页设计方案(html+css+js)之javascript现场授课笔记(完整版).doc...
  3. Sphinx API文档例子
  4. python中注释的作用_Python函数添加注释的好处
  5. vb在 ListBox 之中点击右键弹出菜单
  6. java过滤集合数量,java – 使用lambdaj过滤集合
  7. 【Robot Framework】字符串判断,if语句多执行条件,多执行语句
  8. Javascript链式调用案例
  9. 计算机操作系统教程——分区存储管理
  10. 小学计算机余数在线,余数计算器-余数计算器
  11. 迷宫算法总结(最短路径)
  12. 余光中 听那冷冷的雨
  13. IDEA 顶部导航栏(Main Menu)不见了怎么办?
  14. 日期格式化时候yyyy-MM-dd HH:mm:ss大小写区分
  15. cf - 1457C - Bouncing Ball - ( dp )
  16. 电脑应用程序分身双开及多开(能记住账号和密码)
  17. 黑客防线 2007~2012 NPM、PYPI、DockerHub 备份
  18. python68个内置函数_新手入门!68个Python内置函数建议收藏学习
  19. 五款轻量级的办公软件,界面简洁且无广告
  20. 【阶段1】【定理证明】二项式定理证明

热门文章

  1. 使用短信验证方式登录短视频系统,轻松规避数据臃肿
  2. SPOJ PHT Pigeonhole Tower 预处理+二分 || 找规律
  3. Kubernetes:(十四)安全机制(一定要做好安全措施哦)
  4. 10以太坊Token详解
  5. Photoshop图片秒变素描方法,非常简单
  6. The RK3066/RK30SDK Android 4.2 audio codec has a bug!
  7. 常见的几种隐藏文件的方法
  8. 【我的架构师之路】- golang源码分析之channel的底层实现
  9. Access violation reading location 0x00000004.
  10. 【Flutter小记10】apk 提交各大应用市场,出现armeabi与arm64 版本标识/版本号不一致无法上传审核的解决方案