相信大家或多或少都接触过在大屏的项目,在大屏项目中除了用到了echarts
中的行政地图,街道地图也是很常见的,今天主要来说一下在vue
中调用高德地图遇到的一些问题。
无论我们使用任何方式调用高德地图都需要在高德地图开放平台中申请key
访问高德地图开发平台根据实际情况填写就可以(实名认证的时候选择个人就可以,如果是企业级的项目,可能会涉及人员变动,建议使用公司邮箱进行注册)区别如下。
新建应用时名称,与类型可以随意填写,尽量填写的与开发的应用一直,方便后期维护
应用创建成功之后,点击添加就会需要我们选择需要使用高德地图的哪些服务,不同的服务平台,对应填写的内容也有所区别,例如Android
需要填写App
包名,Android
的SHA1
码等等,因为我这次的项目是个大屏项目所以就选择Web端(JSAPI)
信息填写完毕之后就会在当前应用下生成对应的Key值和安全密钥(安全密钥在之前的版本中是没有的)
vue-amap
vue-amap
是基于 Vue 2.x
与高德的地图组件,提供一些基础和高级的功能,例如:地图扎点,信息窗体,搜索组件,类型插件等等,不需要我们在造轮子了,所以我们就来试一试。
当我们在使用组件的时候都会先看一下文档,但是当我在看文档的时候发现,文档中只有对应的
api
而没有示例,很难下手,于是在issues
中找到了答案。
解决方案也很简单
src/docs/index.html
里的docsify
引用将
修改为
npm install
npm start
默认在4201
端口就会启动项目就可以看到项目示例了。npm
安装npm install vue-amap --save
main.js
中挂载vue-amap
import VueAMap from 'vue-amap';
Vue.use(VueAMap);
VueAMap.initAMapApiLoader({
//申请地址 https://lbs.amap.com/ 选择web端jsAPI
key: '自己申请的高德地图key',
// 插件集合,用到什么插件就使用什么插件
plugin: ['AMap.Autocomplete', 'AMap.PlaceSearch', 'AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PolyEditor', 'AMap.CircleEditor'],
v: '1.4.4', // 高德sdk版本,最新的sdk已经出到了2.0
//官网解释:JSAPI 2.0 提供的开发接口与 1.4 版本达到 99%的兼容度,但是为了保证插件的稳定性我们还是选择1.4.4。
})
以上就是在vue
项目中使用vue-amap
调用高德地图api
的基本使用,具体对地图的操作可以根据文档的规范来就可以了,在使用的过程中可能会遇到几个问题。
// 解决地图刷新显示不出来
const amapKeys = Object.keys(localStorage).filter(key => key.match(/^_AMap_/))
amapKeys.forEach(key => {
// console.log(key)
localStorage.removeItem(key)
})
a[d].split is not a function
注:
vue-amap
是不支持vue3.x
,并且不能绑定高德地图新版api
对应的安全密钥jscode
,可能会导致部分服务无法使用。 对应的vue3
版本的插件看这里。
npm install @amap/amap-jsapi-loader --save
// 该写法只推荐在开发阶段,如果在生产阶段建议采用反向代理
// 官网说明https://lbs.amap.com/api/javascript-api/guide/abc/prepare
window._AMapSecurityConfig = {
securityJsCode: 'jscode' // 输入你的jscode
}
vue-amap
引入高德地图,而部分实例化的操作直接基于高德地图的 sdk
完成实例化操作不是加载地图,简单来说就是用一些属性去实例化地图的这个类
new xxx()
代表的就是实例化xxx
。这样就不需要在使用el-amap
中的center
属性和zoom
属性了,因为已经通过原生的方式进行实例化了。
import { lazyAMapApiLoaderInstance } from 'vue-amap';
lazyAMapApiLoaderInstance.load().then(() => {
// your code ...
this.map = new AMap.Map('amapContainer', {
center: new AMap.LngLat(121.59996, 31.197646)
});
});
vue-amap
中引入高德原生SDK
只需在el-amap
上绑定amap-manager
就可以拿到高德原生AMap.Map
实例文档地址
网上针对高德地图的调用方案也有很多,我也是刚刚接触,文中的观点都是自身的看法,最后说一下自身对选型的判断。
vue-amap
。高德地图API
vue-amap