VUE-amap遇到的坑和总结_position改变后el-amap-marker消失-程序员宅基地

技术标签: vue  前端  Vue-amap  javascript  

使用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-amap
   ref="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-marker
	v-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-marker
  v-for="(marker, index) in markers"
  :key="index"
></el-amap-marker>

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45432736/article/details/103476954

智能推荐

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?_成员内部类和局部内部类的区别-程序员宅基地

文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别

分布式系统_分布式系统运维工具-程序员宅基地

文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具

用Exce分析l数据极简入门_exce l趋势分析数据量-程序员宅基地

文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量

宁盾堡垒机双因素认证方案_horizon宁盾双因素配置-程序员宅基地

文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置

谷歌浏览器安装(Win、Linux、离线安装)_chrome linux debian离线安装依赖-程序员宅基地

文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖

烤仔TVの尚书房 | 逃离北上广?不如押宝越南“北上广”-程序员宅基地

文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...

随便推点

java spark的使用和配置_使用java调用spark注册进去的程序-程序员宅基地

文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序

汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用_uds协议栈 源代码-程序员宅基地

文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码

AUTOSAR基础篇之OS(下)_autosar 定义了 5 种多核支持类型-程序员宅基地

文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型

VS报错无法打开自己写的头文件_vs2013打不开自己定义的头文件-程序员宅基地

文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件

【Redis】Redis基础命令集详解_redis命令-程序员宅基地

文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令

URP渲染管线简介-程序员宅基地

文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线

推荐文章

热门文章

相关标签