vue结合百度地图api实现地址检索、路线规划等功能
vue+百度地图api
- 引入百度地图api
- 获取用户当前位置
- 地址检索(定位)
- 路线规划
- 修改路线规划中的图标图案
- 修改提示框等样式
引入百度地图api
在百度地图开发平台申请到自己的开发密匙
找到项目的根目录index.html位置:
在项目的根目录下的index.html文件中添加如下代码:
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=您的秘钥"></script>
创建一个div用于地图展示
<template><div><div id="allmap" class="allmap"></div></div>
</template>
初始化创建地图
mounted() {//初始化// 创建Map实例this.map = new BMap.Map("allmap");// 初始化地图,设置中心点坐标和地图级别this.map.centerAndZoom("成都", this.mapZoom);// 设置地图显示的城市 此项是必须设置的this.map.setCurrentCity("成都");// 启用滚轮放大缩小,默认禁用this.map.enableScrollWheelZoom(true);// 启用地图惯性拖拽,默认禁用this.map.enableContinuousZoom(true);// 启用地图拖拽,默认启用this.map.enableDragging(true);const cityControl = new BMap.CityListControl({/* 控件的停靠位置(可选,默认左上角)BMAP_ANCHOR_TOP_RIGHT 右上角BMAP_ANCHOR_BOTTOM_LEFT 左下角BMAP_ANCHOR_BOTTOM_RIGHT 右下角*/anchor: BMAP_ANCHOR_TOP_LEFT,// 控件基于停靠位置的偏移量(可选)offset: new BMap.Size(10, 5),});// 将控件添加到地图上this.map.addControl(cityControl);},
获取用户当前位置
Geolocation ( ) 构造函数,用于返回用户当前的位置,会首先调用浏览器自带的定位接口,如果失败或不支持则调用高精IP定位(需要开通权限,否则调用普通定位)接口,如果用户拒绝授权定位,则无法返回任何定位结果。
具体详细信息可参考百度地图JavaScript API v3.0类参考文档1
例:
async atten() {var address = null;//创建Geolocation对象实例var geolocation = new BMap.Geolocation();//返回用户当前位置await geolocation.getCurrentPosition(function(r) {//getStatus()用于获取定位完成后的状态码if (this.getStatus() == BMAP_STATUS_SUCCESS) {// Geocoder类用于获取用户的地址解析var gc = new BMap.Geocoder();gc.getLocation(r.point, function(rs) {//获取地址信息,设置地址labelvar addComp = rs.addressComponents;address =addComp.province +addComp.city +addComp.district +addComp.street +addComp.streetNumber; //获取地址console.log("当前位置"+address);//打印地址});} else {alert("failed" + this.getStatus());}});},
地址检索(定位)
LocalSearch(location: Map | Point | String, opts: LocalSearchOptions)用于位置检索、周边检索和范围检索。 创建一个搜索类实例,其中location表示检索区域,其类型可为地图实例、坐标点或城市名称的字符串。当参数为地图实例时,检索位置由当前地图中心点确定,且搜索结果的标注将自动加载到地图上。
具体详细信息可参考百度地图JavaScript API v3.0类参考文档1
例:
添加一个用于输入地址信息的输入框:
<div><el-inputsize="mini"type="text"id="city"class="inputCity"placeholder="请输入地点"></el-input>
</div>
在methods中添加如下方法:
AddressSearch() {const _this = this// 创建Map实例this.map = new BMap.Map('map')// 初始化地图,设置中心点坐标和地图级别this.map.centerAndZoom(new BMap.Point(104.072242, 30.663711), this.mapZoom)// 设置地图显示的城市 此项是必须设置的this.map.setCurrentCity('成都')//建立一个自动完成的对象//Autocomplete是结果提示、自动完成类。var Aco = new BMap.Autocomplete({// 输入框的idinput: "city",location: this.map,})Aco.addEventListener("onhighlight", function (e) {//鼠标放在下拉列表上的事件})Aco.addEventListener("onconfirm", function (e) {//鼠标点击下拉列表后的事件var _value = e.item.value;// 拼装的地址信息var myValue =_value.province +_value.city +_value.district +_value.street +_value.business;_this.setPlace(myValue);})
}
setPlace(value) {const _this = this;//this.map.clearOverlays(); //清除地图上所有覆盖物// 创建一个检索对象var local = new BMap.LocalSearch(_this.map, {//智能搜索onSearchComplete: function () {var getpo = local.getResults().getPoi(0).point; //获取第一个智能搜索的结果_this.map.centerAndZoom(getpo, 18);_this.map.addOverlay(new BMap.Marker(getpo)); //添加标注},});local.search(e);
},
效果图:
路线规划
TransitRoute(location: Map | Point | String, opts: TransitRouteOptions) 创建一个公交导航实例。location表示检索区域,类型可为地图实例、坐标点或城市名称的字符串。当参数为地图实例时,检索位置由当前地图中心点确定;当参数为坐标时,检索位置由该点所在位置确定;当参数为城市名称时,检索会优先在该城市内进行
具体详细信息可参考百度地图JavaScript API v3.0类参考文档1
例:
添加用于输入起点与终点信息的输入框,以及进行规划功能的按钮
<div class="plan"><div><el-inputsize="mini"type="text"id="startcity"class="inputCity"placeholder="请输入出发地"v-model="startcity"></el-input><el-inputsize="mini"type="text"id="endcity"class="inputCity"placeholder="请输入目的地"v-model="endcity"></el-input></div><el-button @click="searchByStationName1()" class="planBegin"></el-button>
</div>
初始化两个数据,用于储存起点与终点的经纬度
data(){return {from: null,to: null,}
}
在methods中添加如下方法:
通过地址检索的方式设立标注点,同时获取到起点和终点的经纬度坐标
地址检索:
// 起点地点坐标获取searchByStationName1() {const _this = this;var startAddrr = document.getElementById("startcity").value; //获得起始地地名//通过地址检索的方式设立标注点,同时获取到起点和终点的经纬度坐标var localSearch = new BMap.LocalSearch(this.map);//设置检索结束后的回调函数。localSearch.setSearchCompleteCallback(function (searchResult) {var poi = searchResult.getPoi(0); //获得起点经纬度坐标if (poi != null) {//判断地名是否存在_this.from = poi.point;//获得起点经纬度坐标//开始检索终点坐标_this.searchByStationName2();} else {alert("请输入正确的地名!");}});localSearch.search(startAddrr);},// 终点地点坐标获取searchByStationName2: function () {const _this = this;var endAddrr = document.getElementById("endcity").value; //获得目的地地名//通过地址检索的方式设立标注点,同时获取到起点和终点的经纬度坐标var localSearch = new BMap.LocalSearch(this.map,{//检索结束后是否自动调整地图视野autoViewport:false,});//设置检索结束后的回调函数。localSearch.setSearchCompleteCallback(function (searchResult) {var poi = searchResult.getPoi(0); //获得目的地经纬度坐标if (poi != null) {//判断目的地是否存在_this.to = poi.point;//调用公交规划函数_this.TransitPlan();} else {alert("请输入正确的地名!");}});localSearch.search(endAddrr);},
//公交规划TransitPlan() {const self = this;var subwaying = new BMap.TransitRoute(this.map, {//搜索结果的呈现设置renderOptions: {map: this.map,// 详细方案展示,panel的值为div的idpanel: document.getElementById("r-result"),// 拖动路线// enableDragging: true,// 是否选择第一个检索结果selectFirstResult: true,// 检索结束后是否自动调整地图视野autoViewport: true,//设置时间最少方案优先policy:BMAP_TRANSIT_POLICY_LEAST_TIME,},// 检索完成后回调onSearchComplete: function (results) {if (subwaying.getStatus() != BMAP_STATUS_SUCCESS) {return;}// 获取第一个路线var plan = results.getPlan(0);// console.log("路线结果",plan);// 获取时间plan.getDuration(true);// 获取距离plan.getDistance(true);},});//赋值起点与终点的经纬度var start = new BMap.Point(self.from.lng, self.from.lat);var end = new BMap.Point(self.to.lng, self.to.lat); subwaying.search(start, end);//公交规划结束},
效果图:
修改路线规划中的图标图案
方法如下:
//坐标图案var startIcon = new BMap.Icon(require('../../../assets/images/坐标.png'),new BMap.Size(30, 120),{ anchor: new BMap.Size(10, 25) })var endIcon = new BMap.Icon(require('../../../assets/images/坐标.png'),new BMap.Size(30, 120),{ anchor: new BMap.Size(10, 25) })//起点终点图案重新设置airplaneing.setMarkersSetCallback(function (result) {result[0].marker.setOffset(new BMap.Size(0, 40))result[0].marker.setIcon(startIcon)result[1].marker.setOffset(new BMap.Size(12, 45))result[1].marker.setIcon(endIcon)})//初始化地图this.map.centerAndZoom('北京', 14)airplaneing.search(point1, point2)
修改提示框等样式
若发现结果提示框等信息的样式出错或消失,需要修改其样式,可以通过按F12进行开发人员调试,在元素列表中找到我们要的元素,然后获取其类名,对类名的进行css属性的修改即可
<style>
.tangram-suggestion-main {top: 100px !important;z-index: 999;
}
</style>
需要注意的是,若style中有格式要求,如下图所示
<style lang="less" scoped>
则可能修改类名属性操作无法正常实现效果
百度地图JavaScript API v3.0类参考 ↩︎ ↩︎ ↩︎
vue结合百度地图api实现地址检索、路线规划等功能相关推荐
- Python调用百度地图api获取起点终点路线规划距离和预估时长
现有起点和终点坐标值(经纬度lng.lat),目的是通过百度地图开发者平台的路线规划功能获取起点终点路线规划距离和预估时长,百度地图开发者平台路线规划使用说明网址为:http://lbsyun.bai ...
- Vue引用百度地图API
Vue引用百度地图API 一. 通过官网申请ak 1. 打开百度地图官网,在开发文档中找到JavaScript API 2.点击账号和获取密钥 3.按照页面步骤操作即可 二. 通过模块化引入 1. 安 ...
- Vue+Echarts+百度地图API
Vue+Echarts+百度地图API 不容易啊,又注册了一个地图账户 使用npm安装方式 去百度地图官网申请key,也就是地图API密钥AK 在vue项目的public文件夹中的index.html ...
- vue调用百度地图API实现点击相应位置切换地图定位
vue调用百度地图API实现点击相应位置切换地图定位 1.需求分析 在页面显示地图,初始状态显示上海市,地图上有特定地点的标注. 左侧为建筑(地点)列表,点击某个地点右侧地图定位到其地理位置并显示具体 ...
- 【百度地图API】暑假放假回老家——城市切换功能
原文:[百度地图API]暑假放假回老家--城市切换功能 任务描述: 酸奶小妹放寒假啦,要从北京呼啦一下飞回重庆呢.现在百度地图API上不能直接切换城市,怎么办呢? 如何实现: 利用API先搜索到要去城 ...
- vue调用百度地图API输入提示示例下拉列表一直被触发问题
2019独角兽企业重金招聘Python工程师标准>>> 先看图 然后点确定,居然下拉框又被触发了,而且在添加页面各种输入框只要一输入文字就会触发地图下拉框展示,很恶心的一个bug,不 ...
- 百度地图api搜索地址定位
下载地址百度地图api地址搜索定位示例,选择公司名称地图上显示对应地址 dd:
- 百度地图API,改变驾车路线颜色(仿淘宝快递查询,一条路线两个颜色)
想仿淘宝做一个物流查询,分为:寄件点.当前点. 收件点 和 路线图. 快递已走的路径(寄件点到当前点的颜色)和未走的路径(当前点到收件点)用 颜色 进行区分. 利用百度地图提供的API(当时遇到了点问 ...
- vue调用百度地图API
安装 $ npm install vue-baidu-map --save 全局注册 在main.js 里面引入以下代码 import BaiduMap from 'vue-baidu-map'Vue ...
- 百度地图API批量地址转坐标(支持Excel上传,附案例)
最近接到个小任务,需要把Excel 一批地址数据转换成坐标,又不想依赖项目,干脆直接写个HTML算了,内含坐标系转换(百度坐标BD09系转换GPS84坐标系). 目前国内主要有以下三种坐标系: WGS ...
最新文章
- atom编写python程序_如何进行Python程序的编写
- 【研发管理】聊一聊DevOps
- Android 的 dex2jar 和 jd-gui 反编译 apk 源代码
- 人工智能-机器学习之Selenium(chrome驱动,火狐驱动)
- centos 7 firewalld 设置
- 约瑟夫环非递归算法分析
- mysql 单向自动同步_mysql单向自动同步
- php中中文字符串的截取和获取长度 mb_substr() mb_strlen()
- 数学建模学习(57):K-Means聚类原理分析讲解与应用
- 测试工程师面试题整理
- Linux超详细指令及其解析
- nodejs+mp2+mbtiles+实现google底图服务(centos7)
- talentq测试题库rb_talentq测试题目拐
- POI excel插入图表
- Visual Studio - 修改主题背景颜色
- 初级中学计算机知识,计算机基础知识(初级中学级教学方案课程教案).doc
- 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例60
- Windows自带的造字功能使用
- MP3 MP4 里不能缺少的231首歌!
- 新手8周跑步训练计划
热门文章
- 红帽linux员工数,红帽企业 Linux Atomic Host 管理
- 过滤器把样式过滤掉,无法显示样式问题, 处理方法
- 小飞升值记——(9)
- 电脑连上Jink后打开Altium Designer弹出Failed to measure TotalIRLen(6)
- zui之0001 npm install zui
- 用当下的力量共创未来——2017(第十五届)中国互联网经济论坛盛典
- 【Python】腾讯企业邮箱自动发邮件-发送多人并添加附件
- background 互联网图片_微信小程序 background-image设置背景图片不显示的解决办法...
- 预测泰坦尼克号乘客生还率
- 切尔诺贝利_切尔诺贝利泰坦尼克号的自然恢复历史以及复杂系统的课程