基于微信小程序Map标签及高德地图开源方法实现路径导航
微信小程序自带地图map标签,他是基于canvas画图功能进行的地图渲染,同时依赖微信的getlocation获取经纬度,绘制周边地图。地图上可以标点,画线,查看当地地理信息。但是自带的导航功能模块不能对个人开发者公开。
高德地图提供了基于微信小程序map标签的导航功能,只需要将高德文件导入项目,即可获取周边地理信息及导航、天气等信息。返回数据为微信小程序map标签的markers和linear对象形式,只需要稍加修饰,便可实现类似于官方导航的功能。
主要过程为
本次使用的是uniapp 使用vue+默认小程序模板创建项目,
在manifest.json中开启位置授权
1.获取高德支持文件
在高德开放平台下载libs文件 并存放在项目文件夹内
微信原生开发直接按上文配置即可,uniapp的话有可能打包不过去,可以放在这里(一般不用),
然后vue3框架需要修改输出方式
这样import就可以正常引用
import amap from '../../libs/amap-wx.130.js'
2.绘制腾讯地图
在这里我们需要用原生的map先搞一个地图出来,同时wx.getlocation获取用户位置
这里的markers和polyline后面要用,先做个空的容器,其中markers可以先把当前位置标出来
<template><view class="map_container"><map class="map" id="map" :longitude="longitude" :latitude="latitude" scale="14" show-location="true" :markers="markers" bindmarkertap="makertap":polyline="polyline"v-if="latitude"></map></view><input type="text" placeholder="起点" v-model="start"><input type="text" placeholder="终点" @input="bindinput" v-model="target"><view class="tips" v-for="item in tips" :key="item.id" @click="selectThis(item)" >{{item.name}}</view><button @click="bindWalk">步行</button><button>驾车</button><button>公交</button></template>
在onload中初始化地图,并加载高德地图实例
onLoad() {// 初始化高德地图对象console.log(amap)this.amap = new amap.AMapWX({key:'35e208c3050694260e292c0bb9eed6f1'})// 初始化地图let _this = thisuni.getLocation({type: 'wgs84',//北斗success: function (res) {// _this.setData({// longitude : res.longitude,// latitude : res.latitude// })_this.markers =[..._this.markers,{id:0,longitude: res.longitude,latitude:res.latitude,height:30,width:30,iconPath:'../../static/logo.png'}]_this.longitude = res.longitude_this.latitude = res.latitude_this.points = [..._this.points,{longitude: res.longitude,latitude:res.latitude,}]console.log('当前位置的经度:' + res.longitude);console.log('当前位置的纬度:' + res.latitude);} });
3.获取导航信息并渲染
可以注意到我上方的结构是有input框的 ,他用于输入目的地
他的回调可以从高德处获取模糊查询结果,我门将其渲染到input框底部,当点击后选定,并执行后续搜索,点击选定与模糊搜素如下
bindinput(e){console.log(e.target.value)let keywords = e.target.value// console.log(this.amap)this.amap.getInputtips({keywords:keywords,location :'',success:(res)=>{if(res.tips[0]){this.tips = res.tipsconsole.log(this.tips)}}})},selectThis(item){console.log(item)// 记录locationlet targetTemp = item.location.split(',')this.target = item.namethis.tips=[]// this.points = [...this.points,{// longitude: targetTemp[0],// latitude: targetTemp[1],// }]this.points[1] ={longitude: targetTemp[0],latitude: targetTemp[1],}this.markers =[...this.markers,{id:2,longitude: targetTemp[0],latitude: targetTemp[1],height:30,width:30,iconPath:'../../static/logo.png'}]},
html结构
然后我们点击上面的寻路按钮
他的回调是获取步行线路 this.amap.getWalkingRoute()
bindWalk(){// console.log(">>",this.polyline)this.polyline=[]this.amap.getWalkingRoute(this.getDataObject());},
而this.getDataObject()是输入目的地和目前位置的坐标(经纬度),在传入经纬度时我们可以同时传入success回调来处理getWalkingRoute的res,按照下文的方式可以分解为我们需要的画线对象,将其传入准备好的画线容器,大功告成
getDataObject(color){let _this = this;let colors = color || '#00AC62';// console.log("@",this.points)return{origin:_this.points[0].longitude+','+_this.points[0].latitude,destination:_this.points[1].longitude+','+_this.points[1].latitude,success:function(data){// console.log(">>",data)if(!data.paths){console.log('search failed')return;}let steps = data.paths[0].stepslet points = []// console.log(">",steps)for(let i = 0 ; i <steps.length;i++){let polylines = steps[i].polyline.split(';')for(let j = 0 ; j <polylines.length;j++){let locations = polylines[j].split(',');points.push({longitude: locations[0],latitude: locations[1],})}}// 注意这里_this.polyline =[{points:points,color:colors,width:6}] // _this.polyline =[..._this.polyline,{// points:points,// color:colors,// width:6// }] // console.log("@",_this.polyline)}}}
演示
:
再吃输入,这里有一点需要注意,再次寻路时清空线路数组,始发地目前是本地,如果用选择目的地相同的方法选择始发地,替换掉markers的第一项,并将其经纬度替换后传入getWalkingRoute可以获得两点导航,如果只是目的地导航,则要保证markers第一个点不动
还有一点markers第一个本地位置是初始化后就有的,入伙需要动态导航还需要双向绑定第一个标点与本人位置的经纬度,我的方法是当经纬度变化时重新标点,然后将位已规划好的线路按当前位置分为两段(filter),用不同颜色标识。(我正在写,所以不提供代码只提供思路)
原始教程出处微信小程序高德地图路线查询_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ek4y1z7hu?spm_id_from=333.337.search-card.all.click&vd_source=764374ab7bfa55ce0f00952d67efc61b
基于微信小程序Map标签及高德地图开源方法实现路径导航相关推荐
- 微信小程序map 动态修改markers的解决方法
微信小程序map动态markers的解决方法 先上效果图 这里演示点击标记点,改变他的气泡背景颜色和字体颜色 1.动态修改数据,需要用到 this.setData(), 2.markers 是一个数组 ...
- 【微信小程序】免费的高德地图api——获取天气(全过程)
介绍 这里是小编成长之路的历程,也是小编的学习之路.希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡. 一个人为什么要努力? ...
- uniapp微信小程序打开手机里高德地图或腾讯地图软件导航
使用: uni.openLocation({latitude: 40.06860293364108,longitude: 116.31334115479277,name: "亿度物联&quo ...
- 微信小程序----map组件实现检索【定位位置】周边的POI
WXRUI体验二维码 如果文章对你有帮助的话,请打开微信扫一下二维码,点击一下广告,支持一下作者!谢谢! 声明 bug: 页面顶部分类[汽车服务.汽车销售等]列表和页脚的详细地址在真机测试是会出现不显 ...
- 基于微信小程序电子产品商城系统(springboot+ mybatis-plus+mysql+原生微信小程序)
一.系统介绍 近年来,随着微信在我国互联网中的广泛使用,基于微信的小程序应用也如雨后春笋,2020年全网小程序已超600万,其中,微信小程序数量超380万.本论文所研究的正是基于微信小程序的电子商城的 ...
- 基于微信小程序的高校餐厅食品留样管理系统设计与实现-计算机毕业设计源码+LW文档
小程序开发说明 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclip ...
- (附源码)springboot+基于微信小程序音乐播放器的设计与实现 毕业设计271156
Springboot音乐播放小程序的设计与实现 摘 要 本文设计了一种基于微信小程序的音乐播放器,系统为人们提供了方便快捷.即用即搜的音乐搜索播放服务,包括音乐资讯.音乐库推荐.交流论坛.注册登录.最 ...
- 基于微信小程序的智能停车场管理系统的设计与实现
要] 计算机网络如果结合使用信息管理系统,能够提高管理员管理的效率,改善服务质量.优秀的智能停车场管理系统能够更有效管理用户预约停车业务规范,帮助管理者更加有效管理用户预约停车,可以帮助提高克服人工管 ...
- 微信小程序开发|基于微信小程序的健身陪练系统的设计与实现
作者主页:编程指南针 作者简介:Java领域优质创作者.CSDN博客专家 .CSDN内容合伙人.掘金特邀作者.阿里云博客专家.51CTO特邀作者.多年架构师设计经验.腾讯课堂常驻讲师 主要内容:Jav ...
最新文章
- 中国大学的现实:层次越低,上课越多,学生读书越少
- MathType与Origin是怎么兼容的
- ASP.NET数据绑定的记忆碎片
- 人工智能/数据科学比赛汇总 2019.2
- jmeter压力测试linux,JMeter压力测试
- 如何去掉WordPress分类目录url链接中的category,如何处理生成的作者链接
- 零基础入门深度学习(2) - 线性单元和梯度下降
- linux 命令 —— pwd
- 珍大户《认知世界的经济学》学习笔记 -- 第21课 利率的计算 更新时间2021年07月27日22:14:34
- pytho读文件| python文件去重 | python去除重复行
- 光谱分析软件_利用Tracker软件分析车前草提取液的吸收光谱特征
- PS打不开webp格式图片的解决方法
- 超棒工具8个高质量图标搜索引擎
- pip指定网址下载安装(清华源)
- 云计算、云服务器、云数据库和云存储基本介绍
- 基于uniapp的校园社区小程序
- 用单片机C语言开发雨滴智能屏小程序
- mix2s适配鸿蒙,小米MIX2S|MIUI10|9.05.12|GPU调节|CPU调节_最新最全的小米MIX 2SROM刷机包下载、刷机...
- 大学可以这样读——我的心路历程和一点思考
- 添加集控程序的守护进程一般操作【Linux,CentOS7.5】