“百度地图vue-baidu-map” VS ”高德地图vue-amap”

一、一个需求

一个web项目中对在线电子地图有两个需求:
1、在地图上点击,可以获取到点击地区的行政区划代码
2、根据指定单位名称在地图上能够自动定位

二、郁闷的解决方案

首先我选用了百度地图在vue里的组件vue-baidu-map,安装使用都非常方便,文档也比较全,可以满足需求2,但不能满足需求1。其对于需求1的实现方式是,获取到鼠标单击地点的行政区划中文名称,然后通过百度提供的“百度地图行政区划adcode映射表”,从中自行根据中文名称查找对应的行政区划代码。

后来想起笔者用过高德地图在cordova中的组件,记得可以直接获取到行政区划代码,于是安装了高德地图在vue中的组件vue-amap,由于这是饿了么开源的一个组件,所以其在quasar中的使用资料非常少,好不容易搞定了其可以在quasar中的使用,发现可以满足需求1,但不能完全满足需求2。其对于需求2的实现方式,只能查询指定地址所在的坐标,然后进行定位,如果直接通过单位名称,虽然也可以查到坐标,但有比较大的偏移,即定位到的地图上的单位名称和实际的单位名称不同(因为偏移掉了,指到另外一个地点上的单位)。

现在要同时满足以上两个需求,您说我应该选用哪个组件???

(笔者最终选用的高德地图,因为通过修改功能需求,高德地图勉强能够同时满足以上两个需求)

三、vue-baidu-map

    这个组件在网上资料很多,可以非常方便的在quasar中使用,本文就不赘述了。

四、vue-amap

    这个组件的资料网上比较少,尤其是在quasar中的使用经验介绍更加少,所以本文详细介绍下这方面内容。

1、安装

    这个组件的资料在这里可以找到,不过其上API、示例等介绍都非常简单,这方面详细内容还得到高德官网的高德开放平台上具体查询使用。

    和其它VUE组件一样的安装方法,在quasar项目目录里执行如下命令即可:

npm install vue-amap --save

2、申请KEY

高德地图在WEB端、Android、IOS三种应用需要分别申请KEY,Android、IOS的KEY的申请可以参见《基于cordova-amap-location插件的高德地图定位实现》,WEB端的申请方式参见下图即可:

3、加载

    在/src/router/index.js文件中增加如下代码,以将组件加载应用中:

import VueAMap from 'vue-amap'   
 Vue.use(VueAMap) 
VueAMap.initAMapApiLoader({
      key: 'WEB服务的KEY值',
      plugin: ['AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType','AMap.Geocoder'],   //使用的插件必须首先在此注册,否则在使用时会出现不稳定,甚至直接出错
       v: '1.4.4',
        uiVersion: '1.0'     //UI的版本号,直接增加了这一样才能使用其所提供的UI组件
}) 

4、使用

     以下是一个测试可以用的示例程序,在此基础上参照官网上的API和示例,就可以开发出更多需求的高德地图应用:

<template>
    <div>
         <q-window-resize-observable @resize="onResize" />
         <!--这是一个全屏地图-->
     <div id="container" :style="{width:mapinfo.width,height:mapinfo.height}"></div>
 </div>
</template>
<script>
export default {
    data() {
     return {
         mapinfo: {
                 center: { lng: 113.27, lat: 23.13 },
                 zoom: 12,
                 width: '100%',
                 height: '400px'
         },
         sys_geocoder: {}, //地理编码对象
         sys_map: {}, //地图对象
     }
 },
 methods: {
     initsystem() {
         this.mapGet();
         this.set_mappoint("江苏省南京市中山北路200-2号");
         },
     onResize(size) {
     //确保高度是全屏
     this.mapinfo.height = size.height - 68 + "px";
     },
    mapGet() {
     this.sys_map = new window.AMap.Map('container', {
         resizeEnable: true,
         zoom: 15,
         showIndoorMap: false, // 是否在有矢量底图的时候自动展示室内地图,PC默认true,移动端默认false
         dragEnable: true, // 地图是否可通过鼠标拖拽平移,默认为true    
        keyboardEnable: true, // 地图是否可通过键盘控制,默认为true
         doubleClickZoom: true, // 地图是否可通过双击鼠标放大地图,默认为true
           zoomEnable: true, // 地图是否可缩放,默认值为true
          rotateEnable: false, // 地图是否可旋转,3D视图默认为true,2D视图默认false viewMode: '3D'
      });
       this.sys_geocoder = new window.AMap.Geocoder({
             radius: 1000,
             //city:"010" , //指定进行编码查询的城市,支持传入城市名、adcode 和 citycode
             extensions: "all"
         });
         //显示单击的地址信息
         this.sys_map.on('click', (e) => {
             let lngMain = e.lnglat.getLng();
             let latMain = e.lnglat.getLat();
             this.sys_geocoder.getAddress([lngMain, latMain], function(status, result) {
                 if (result.regeocode.addressComponent.adcode) {    
                         console.log(result.regeocode.addressComponent); }; }); });
     },
     set_mappoint(s_address) {
         this.sys_geocoder.getLocation(s_address, (status, result) => {
             if (result.geocodes) {
                     if (result.geocodes.length > 0) {
                         let lngMain = result.geocodes[0].location.getLng();
                         let latMain = result.geocodes[0].location.getLat();
                         this.sys_map.setCenter([lngMain, latMain]); //设置地图中心点
                         }; }; }); },
  },
 mounted() {
     this.initsystem();
 },
 watch: {},
}
</script>
<style>
</style>

    以上功能在实现了加载高德地图后,还将指定地点“江苏省南京市中山北路200-2号”设置为当前地图的中心。这个示例功能的另外一个特色就是实现了地图全屏展示,可以借鉴一下代码中的实现方式。

五、简单总结

1、百度地图的vue组件,安装使用都比较简单,实现代码也简洁、直观。正常情况下推荐使用这个组件。

2、高德地图的vue组件,如果在ElementUI框架使用会比较方便,如果在quasar等UI前端界面框架下使用就有些小麻烦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容