1.在百度地图申请密钥:http://lbsyun.baidu.com/ 将

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=密钥" ></script> 中的密钥替换成你申请的,在vue项目的index.html引用。
2. 在build 文件下下的 webpack.base.conf.js贴入代码
externals: {
"BMap": "BMap"
},

3. map.vue代码(demo可以直接使用,demo使用了vue-clipboard2插件,请自行安装)

<template>
<div>
<el-row >
<el-col :offset="2" :span="8">
<el-input :id="suggestId" v-model="address_detail" :clearable='clearable' placeholder="请输入店铺地址,获取店铺坐标" >
</el-input>
</el-col>
<el-col :span="2">
<el-button id="position" @click="search" type="primary">定位</el-button>
</el-col>
<el-col :span="12" >
<el-tag type="success" v-clipboard:copy="userlocation.lng" v-clipboard:success="onCopy" v-clipboard:error="onError" >经度 {{userlocation.lng}}</el-tag>
<el-tag type="success" v-clipboard:copy="userlocation.lat" v-clipboard:success="onCopy" v-clipboard:error="onError">纬度 {{userlocation.lat}}</el-tag>
<el-tag type="success" ><<<<点击左侧按钮复制经纬度信息</el-tag>
</el-col>
</el-row>
<el-row>
<el-col :offset="2" :span="18">
<div id="map_canvas" class="allmap"></div>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
data() {
return {
address_detail: "", //详细地址
userlocation: { lng: "", lat: "" },
clearable: true,
suggestId: "suggestId",
map : {},
mk: {}
};
},
created () { },
methods: {
drawMap() {
this.map = new BMap.Map("map_canvas"); // 创建地图实例
this.map.addControl(new BMap.NavigationControl()); // 启用放大缩小 尺
this.map.enableScrollWheelZoom();
this.getlocation();//获取当前坐标, 测试时获取定位不准。 var point = new BMap.Point(this.userlocation.lng, this.userlocation.lat); // 创建点坐标
this.map.centerAndZoom(point, 13); // 初始化地图,设置中心点坐标和地图级别
var marker = new BMap.Marker(point); // 创建标注
this.map.addOverlay(marker); // 将标注添加到地图中 var ac = new BMap.Autocomplete({
//建立一个自动完成的对象
input: "suggestId",
location: this.map
});
var myValue;
ac.addEventListener("onconfirm", (e)=> {
//鼠标点击下拉列表后的事件
var _value = e.item.value;
myValue =_value.province +_value.city +_value.district +_value.street +_value.business;
this.address_detail = myValue;
this.setPlace();
});
},
getMarker (point) {
this.mk = new BMap.Marker(point);
this.mk.addEventListener("dragend", this.showInfo);
this.mk.enableDragging(); //可拖拽
this.getAddress(point);
this.map.addOverlay(this.mk);//把点添加到地图上
this.map.panTo(point);
},
getlocation () {
//获取当前位置
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition((r) =>{
if(geolocation.getStatus() == BMAP_STATUS_SUCCESS){
this.getMarker(r.point);
this.userlocation = r.point;
}else {
alert('failed'+this.getStatus());
}
});
},
//绑定Marker的拖拽事件
showInfo(e){
var gc = new BMap.Geocoder();
gc.getLocation(e.point, (rs)=>{
var addComp = rs.addressComponents;
var address = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;//获取地址 //画图 ---》显示地址信息
var label = new BMap.Label(address,{offset:new BMap.Size(20,-10)});
this.map.removeOverlay(this.mk.getLabel());//删除之前的label this.mk.setLabel(label);
this.address_detail = address;
this.userlocation = e.point; });
},
//获取地址信息,设置地址label
getAddress(point){
var gc = new BMap.Geocoder(); gc.getLocation(point, (rs)=>{
var addComp = rs.addressComponents;
var address = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;//获取地址 //画图 ---》显示地址信息
var label = new BMap.Label(address,{offset:new BMap.Size(20,-10)});
this.map.removeOverlay(this.mk.getLabel());//删除之前的label
this.address_detail = address;
this.mk.setLabel(label); }); },
setPlace() {
this.map.clearOverlays(); //清除地图上所有覆盖物
var th = this
function myFun() {
th.userlocation = local.getResults().getPoi(0).point; //获取第一个智能搜索的结果
th.map.centerAndZoom(th.userlocation, 18);
th.getMarker(th.userlocation);
} var local = new BMap.LocalSearch(this.map, {
onSearchComplete: myFun //智能搜索
});
local.search(this.address_detail);
},
search () {
var localSearch = new BMap.LocalSearch(this.map);
localSearch.enableAutoViewport(); //允许自动调节窗体大小
this.searchByInputName(localSearch);
},
searchByInputName(localSearch) {
this.map.clearOverlays(); //清空原来的标注
var th = this;
var keyword = this.address_detail;
localSearch.setSearchCompleteCallback(function(searchResult) {
var poi = searchResult.getPoi(0);
th.userlocation = poi.point;
th.map.centerAndZoom(poi.point, 13);
th.getMarker(th.userlocation);
});
localSearch.search(keyword);
},
onCopy () {
this.$message('内容已复制到剪贴板!');
},
onError () {
this.$message('内容复制失败,请重试!'); } },
mounted() {
this.$nextTick(function() {
this.drawMap();
}); }
};
</script>
<style scoped>
.allmap {
width: 100%;
height: 400px;
font-family: "微软雅黑";
border: 1px solid green;
}
.el-tag {
cursor: pointer;
}
</style>

  希望对大家有帮助!

  

 

vue使用百度地图的更多相关文章

  1. Angular/Vue调用百度地图+标注点不显示图标+多标注点计算地图中心位置

    整理一下~ 一.在vue中调用百度地图 首先当然是申请百度密匙(很简单,不多说) 1.在index.html文件中引入百度地图JavaScript API接口:   <script type=& ...

  2. 解决Vue引入百度地图JSSDK:BMap is undefined 问题

    百度地图官网文档介绍使用JSSDK时,仅提供了2种引入方式: script引入 异步加载 解决跨域问题,实例调用百度地图 但vue项目中仅某一两个页面需要用到百度地图,所以不想在 index.html ...

  3. vue中百度地图API的调用

    1.使用百度地图api需要使用jsonp,来获取百度api的返回,因为vue不自带jsonp所以需要下载 安装jsonp npm i vue-jsonp -S 引入jsop import Vue fr ...

  4. 解决vue中百度地图覆盖物引用本地图片问题

    这次的主要目的是在百度地图中引用自定义的覆盖物,路径是再asset/images/文件夹下,直接引用出错.需要先导入再引用. 在<script></script>代码中增加如下 ...

  5. Vue 使用百度地图 实现搜索 定位

    要求能定位到国外 及 查看了文档 百度支持东南亚大部分地区  满足需求 从而使用百度地图 <template> <div class="addHospital"& ...

  6. vue结合百度地图Api实现周边配置查询及根据筛选结果显示对应坐标详情

    在我们平常写房地产相关项目的时候经常会用到百度地图,因为这一块客户会考虑到房源周围的配套或者地铁线路所以在这类项目中就不可以避免的会用到百度地图,当然这只是其中一种,其他地图工具也可以,因为我这个项目 ...

  7. vue引入百度地图 --BMap is not defined ,eslint BMap报错

    在mounted初始化地图的时候,因为异步问题会导致BMap is not defined,也就是百度的api还没完全引入或者加载完成,就已经进行地图初始化了 解决方法: 1.创建一个map.js e ...

  8. vue引入百度地图api组件封装(根据地址定位)

    Map.vue <template> <div class="Map" :style="{ height: this.height+'px', widt ...

  9. Vue 使用百度地图组件

    npm 安装 npm install vue-baidu-map --save组件官网地址 https://dafrok.github.io/vue-baidu-map/#/

随机推荐

  1. 原生ajax封装,包含post、method方式

    原生ajax封装,包含post.method方式 function ajax(method, url, data, success) { var xhr = null; try { xhr = new ...

  2. ThreadLocal的实现机制

    TLS(Thread Local Storage)通过分配更多内存来解决多线程对临界资源访问的互斥问题,即每个线程均自己的临界资源对象, 这样也就不会发生访问冲突,也不需要锁机制控制,比较典型的以空间 ...

  3. javascript数据基本类型和引用类型区别详解

    JavaScript基本数据类型: js基本数据类型包括:undefined,null,number,boolean,string.基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值. ...

  4. Java之集合(二十六)ConcurrentSkipListMap

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7542578.html 1.前言 一个可伸缩的并发实现,这个map实现了排序功能,默认使用的是对象自身的compa ...

  5. Java之集合(十六)ArrayBlockingQueue

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7427763.html 1.前言 JDK5是一个重要的更新版本,其提供了大量的并发类.之前的介绍都是一些util下 ...

  6. Java之IO(七)ObjectInputStream和ObjectOutputStream

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7003536.html 1.前言 本章介绍Java字节流中重要的成员,对象流ObjectInputStream和O ...

  7. Fiddler Web Debugger的下载和安装(图文详解)

    不多说,直接上干货! Fiddler是一个http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的数据 ...

  8. docker 使用swarm overlay网络时,报“network xx not manually attachable”错误解决

    当使用swarm的overlay网络,在该网络中运行容器时报“network xx not manually attachable”的错误 docker network create -d overl ...

  9. springboot-3-其他配置

    1, 热部署: 有jrebel的话, 不用了, 不如jre好用 原理: 使用两个classLoad, 一个加载不改变的jar, 另一个加载可更改的jar, 发生改变后, 舍弃可更改的jar重新rest ...

  10. Memcached理解笔记1---安装&常规错误&监控

    一.下载 1.Libevent 简单的说就是一个事件触发的网络库,Memcached离不开它. wget http://cloud.github.com/downloads/libevent/libe ...