Vue中使用百度地图做路径分析并根据起终点坐标模拟道路里程桩
1.我们先要在vue中引入百度地图的API
第一步:在vue中的index.html文件中加上一个script标签:
<script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=你在百度地图申请的秘钥"></script>
第二步:在你的build>webpack.base.conf.js
文件中配置你的webpack
module.exports = {externals: {'BMap': 'BMap'}
}
第三步:安装bmap依赖
npm install bmap -S
2.开始写我们的路径分析代码
template
部分
<div class="map_wrap" style="position: relative"><div style="position: absolute;top: 0;right: 0;z-index:998;padding: 20px" >//我这里使用的是ant-design-vue <a-select style="width:200px;background:rgba(255,255,255,0.5)" placeholder="请选择路线" @change="handleChange"><a-select-option value="G1">京哈高速</a-select-option><a-select-option value="G2">京沪高速</a-select-option><a-select-option value="G3">京台高速</a-select-option><a-select-option value="G4">京港澳高速</a-select-option><a-select-option value="G5">京昆高速</a-select-option><a-select-option value="G6">京藏高速</a-select-option><a-select-option value="G7">京新高速</a-select-option></a-select></div><div id="myBMap"></div></div>
script
部分
import BMap from 'BMap' //引入一个地图实例export default {name: 'HelloWorld',data() {return {searchData: { //搜索数据startArr: '',endArr: '',},inputData: { //输入框中的数据inputStart: '',inputEnd: '',},map: '', //地图实例transit: '', //路径规划实例pointCollection_Hm: '', //存储百米桩坐标集合实例pointCollection_Km: '', //存储千米桩坐标集合实例}},methods: {formatting(value1,value2) { //坐标赋值函数并执行搜索操作this.inputData.inputStart = value1;this.inputData.inputEnd = value2;this.getSearchData();},handleChange(value) {if(value == 'G1') {// console.log('京哈高速')this.formatting('116.554678,39.874977','126.62679,45.643178');}else if(value == 'G2') {// console.log('京沪高速')this.formatting('116.554678,39.874977','121.086648,31.325675');}else if(value == 'G3') {// console.log('京台高速')this.formatting('116.455164,39.722139','119.635848,25.707961');}else if(value == 'G4') {// console.log('京港澳高速')this.formatting('116.178598,39.787347','114.048096,30.687724');}else if(value == 'G5') {// console.log('京昆高速')this.formatting('115.90267,39.631174','102.376205,25.50851');}else if(value == 'G6') {// console.log('京藏高速')this.formatting('116.226513,40.222865','90.717376,29.914123');}else {// console.log('京新高速')this.formatting('115.961958,40.509827','88.666598,43.074229');}},initBMap() { //初始化一个地图实例let map = new BMap.Map("myBMap");map.centerAndZoom(new BMap.Point(116.404, 39.915), 12); //设置地图的中心点map.enableScrollWheelZoom(); //启用滚轮放大缩小this.map = map;},search_router() {let output = "";let searchComplete = function (results) {if (transit.getStatus() != BMAP_STATUS_SUCCESS) {return;}let plan = results.getPlan(0); //获得第一个导航策略// console.log(results);// output = plan.getDuration(true); //获取时间output = plan.getDistance(true); //获取距离};let polylinesSet = function () {};//生成一个驾车路线实例let transit = new BMap.DrivingRoute(this.map, {renderOptions: {map: this.map}, //搜索结果呈现的配置onSearchComplete: searchComplete, //检索完成后的回调函数onPolylinesSet: polylinesSet,});if (this.transit) { //清除上一次的搜索this.transit.clearResults()}this.transit = transit;let startArr = this.searchData.startArr; //起点坐标let endArr = this.searchData.endArr; //终点坐标if (Array.isArray(this.searchData.startArr) & Array.isArray(this.searchData.endArr)) {let start = new BMap.Point(parseFloat(startArr[0]), parseFloat(startArr[1])); let end = new BMap.Point(parseFloat(endArr[0]), parseFloat(endArr[1]));transit.search(start, end);transit.setSearchCompleteCallback(()=>{let Distance = transit.getResults().getPlan(0).getDistance(true); //获取距离let pts = transit.getResults().getPlan(0).getRoute(0).getPath(); //通过驾车实例,获得一系列点的数组//我们通过获得的点的数组,为下面模拟道路里程桩提供点数据let points_Hm = []; // 百米桩let points_km = []; //千米桩pts.forEach((item,index)=> {if(index%10 == 0) { //每十个坐标点取一个千米桩points_km.push(new BMap.Point(pts[index].lng, pts[index].lat))}else {points_Hm.push(new BMap.Point(pts[index].lng, pts[index].lat))}});let options_Hm = { //百米桩图标配置size: BMAP_POINT_SIZE_BIG,shape: BMAP_POINT_SHAPE_STAR,color: '#d340c3'};let options_Km = {size: BMAP_POINT_SIZE_BIGGER,shape: BMAP_POINT_SHAPE_STAR,color: '#f00'};//在地图实例上将这点渲染出来let pointCollection_Hm = new BMap.PointCollection(points_Hm, options_Hm); // 百米桩//清除上一次搜索出现的点集合if (this.pointCollection_Hm) {this.pointCollection_Hm.clear()}this.pointCollection_Hm = pointCollection_Hm;this.map.addOverlay(pointCollection_Hm); // 添加Overlaylet pointCollection_Km = new BMap.PointCollection(points_km, options_Km); // 千米桩if (this.pointCollection_Km) {this.pointCollection_Km.clear()}this.pointCollection_Km = pointCollection_Km;this.map.addOverlay(pointCollection_Km); // 添加Overlay});} else {transit.search(startArr, endArr)}},getSearchData() {let start_data = this.inputData.inputStart;let end_data = this.inputData.inputEnd;if (start_data.indexOf(',') >= 0 & end_data.indexOf(',') >= 0) {let arr1 = this.inputData.inputStart.split(',');let arr2 = this.inputData.inputEnd.split(',');this.searchData.startArr = arr1;this.searchData.endArr = arr2;this.search_router();} else {this.searchData.startArr = start_data;this.searchData.endArr = end_data;this.search_router()}},},mounted() {this.initBMap()}}
style
部分
.map_wrap {width: 100%;height: 100vh;position: fixed;overflow: hidden;}#myBMap {width: 100%;height: 100%;}
最终实现的效果图:
存在的问题
① 路径查询是基于百度地图的路径规划和驾车路线API实现的,短距离道路显示完整。但是当起始点经纬度和终点经纬度距离较远时,以’京昆高速’为例,中间应该全部显示京昆高速,但是百度地图做了路径优化,中间可能会掺杂其他高速道路。
② 道路上自动生成的路桩图标不等距,且自动生成的点数量只有理论数量的2/3。(根据百度地图API自动生成的点一般都在道路的特征位置,指示路标等处)
如果您对存在的问题有好的解决方案,或对代码优化有什么好的建议,请及时在下方留言,不胜感激!
Vue中使用百度地图做路径分析并根据起终点坐标模拟道路里程桩相关推荐
- VUE中使用百度地图BaiduMap
VUE中使用百度地图BaiduMap 以前在html页中使用了echart,做了很多图表,也集成了百度地图,效果很好.最近,开始研究vue加 .net core的框架,所以也想把echart和百度地图 ...
- vue中调用百度地图实现搜索等功能
vue中调用百度地图实现搜索等功能 在最近做电商项目时用户订单等物流信息想做的更加详细点所以加入了地图这个小功能,不是很难只是在一个未知的领域可能有点迷茫 现在也是体会到了,学新的东西还是得看官方文档 ...
- vue中调用百度地图 获取经纬度
项目中,需要实现获取当前位置的经纬度,或者搜索某个位置并获取经纬度信息,我使用的的是vue,地图使用的是百度地图. 默认自动获取当前位置经纬度 拖动小红标 获取经纬度 关键词 查询获取经纬度 前期准备 ...
- Vue中使用百度地图
安装 npm $ npm install vue-baidu-map --save cdn <script src="https://unpkg.com/vue-baidu-map&q ...
- vue中实现百度地图的引用(根据输入框输入内容获取详细地址)
vue中实现百度地图的引用(根据输入框输入内容获取详细地址) 代码内容参考:https://www.cnblogs.com/shuaifing/p/8185311.html 最终实现效果 第一步:在i ...
- Vue中使用百度地图——设置地图标注
知识点:创建Map实例,为指定的位置设置标注 参考博客:https://www.cnblogs.com/liuswi/p/3994757.html 1.效果图:初始化地图,设置指定经纬度为地图中心点坐 ...
- 在vue中使用百度地图API:区域显示3D棱柱、地点标注、信息提示
文章目录 1.在vue中引入百度地图的script 2.生成想要的地图样式 3.生成地图 4.创建3d棱柱 5.设置标记点和提示框 6.代码总结 1.在vue中引入百度地图的script 在publi ...
- 在vue中使用 百度地图
本篇文章主要讲述, 如何在vue项目中集成百度地图 1.首先找到你项目底下的index.html入口文件,这个根据不同的版本,所以存在的位置是不同的,具体如下: a.路径如下: 项目名/public/ ...
- vue中使用 百度地图 轨迹动画
本篇文章主要讲述, 如何在vue项目中集成百度地图 1.首先找到你项目底下的index.html入口文件,这个根据不同的版本,所以存在的位置是不同的,具体如下: a.路径如下: 项目名/public/ ...
最新文章
- 往阿里云服务器上安装Mysql
- Python的Descriptor和Property混用
- python测试之道进阶,Pytest-Mock 进阶用法详解
- mysql安装尝试创建新用户失败_Linux MySQL yum安装 创建新用户
- 艾瑞发布2018视频云行业报告,网易云信领跑第一阵营
- 指令引用的0x0000000内存 不能为written_浅谈虚拟机内存区
- 经典面试题(49):以下代码将输出的结果是什么?
- c++将小数化为二进制_C++中的float内存存储、与十进制的转换
- Scala 下载安装配置
- shell脚本实现逻辑关系与、或、非
- 计算机系统盘怎么扩充,怎么给win7电脑C盘扩容
- katana 靶机 wp
- Multithreaded Rendering Graphics Jobs 多线程渲染与图形Jobs 性能系列8
- 增量式编码器和绝对式编码器
- Qt GUI图形图像开发之QT表格控件QTableView详细使用方法与实例
- html选区控制怎么用,ps载入选区的快捷键是什么?
- 使用python-docx将爬取结果保存到word
- 列维飞行的幂律意味着什么
- 闲鱼提效最佳实践:打造OKR机制下的数据驱动敏捷团队
- 基于H5的头脑风暴趣味游戏设计(趣味问答)
热门文章
- sqlite3 外键作用原理和使用方法
- mosquitto_sub、mosquitto_pub命令参数解析
- Java中Person类型赋值_Java设计:定义一个Person类和它的子类Employee。Person类有姓名、地址、电话号码和电子邮箱,...
- 弹性法计算方法的mck法_SAM4E单片机之旅——9、UART与MCK之MAINCK
- A1490. osu!(乔明达)|概率与期望|卡常|矩阵
- Windows安装sql Server2016
- 互联网日报 | 贝壳找房更新IPO招股书;云闪付App用户数突破3亿;宝马近11年来首次季度亏损...
- HDFS依旧是存储的王者
- 如何让苹果电脑macOS原生支持读写多个NTFS格式硬盘
- 用户活跃度和物品流行度的分布