微信小程序自带地图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标签及高德地图开源方法实现路径导航相关推荐

  1. 微信小程序map 动态修改markers的解决方法

    微信小程序map动态markers的解决方法 先上效果图 这里演示点击标记点,改变他的气泡背景颜色和字体颜色 1.动态修改数据,需要用到 this.setData(), 2.markers 是一个数组 ...

  2. 【微信小程序】免费的高德地图api——获取天气(全过程)

    介绍 这里是小编成长之路的历程,也是小编的学习之路.希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡. 一个人为什么要努力? ...

  3. uniapp微信小程序打开手机里高德地图或腾讯地图软件导航

    使用: uni.openLocation({latitude: 40.06860293364108,longitude: 116.31334115479277,name: "亿度物联&quo ...

  4. 微信小程序----map组件实现检索【定位位置】周边的POI

    WXRUI体验二维码 如果文章对你有帮助的话,请打开微信扫一下二维码,点击一下广告,支持一下作者!谢谢! 声明 bug: 页面顶部分类[汽车服务.汽车销售等]列表和页脚的详细地址在真机测试是会出现不显 ...

  5. 基于微信小程序电子产品商城系统(springboot+ mybatis-plus+mysql+原生微信小程序)

    一.系统介绍 近年来,随着微信在我国互联网中的广泛使用,基于微信的小程序应用也如雨后春笋,2020年全网小程序已超600万,其中,微信小程序数量超380万.本论文所研究的正是基于微信小程序的电子商城的 ...

  6. 基于微信小程序的高校餐厅食品留样管理系统设计与实现-计算机毕业设计源码+LW文档

    小程序开发说明 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclip ...

  7. (附源码)springboot+基于微信小程序音乐播放器的设计与实现 毕业设计271156

    Springboot音乐播放小程序的设计与实现 摘 要 本文设计了一种基于微信小程序的音乐播放器,系统为人们提供了方便快捷.即用即搜的音乐搜索播放服务,包括音乐资讯.音乐库推荐.交流论坛.注册登录.最 ...

  8. 基于微信小程序的智能停车场管理系统的设计与实现

    要] 计算机网络如果结合使用信息管理系统,能够提高管理员管理的效率,改善服务质量.优秀的智能停车场管理系统能够更有效管理用户预约停车业务规范,帮助管理者更加有效管理用户预约停车,可以帮助提高克服人工管 ...

  9. 微信小程序开发|基于微信小程序的健身陪练系统的设计与实现

    作者主页:编程指南针 作者简介:Java领域优质创作者.CSDN博客专家 .CSDN内容合伙人.掘金特邀作者.阿里云博客专家.51CTO特邀作者.多年架构师设计经验.腾讯课堂常驻讲师 主要内容:Jav ...

最新文章

  1. 中国大学的现实:层次越低,上课越多,学生读书越少
  2. MathType与Origin是怎么兼容的
  3. ASP.NET数据绑定的记忆碎片
  4. 人工智能/数据科学比赛汇总 2019.2
  5. jmeter压力测试linux,JMeter压力测试
  6. 如何去掉WordPress分类目录url链接中的category,如何处理生成的作者链接
  7. 零基础入门深度学习(2) - 线性单元和梯度下降
  8. linux 命令 —— pwd
  9. 珍大户《认知世界的经济学》学习笔记 -- 第21课 利率的计算 更新时间2021年07月27日22:14:34
  10. pytho读文件| python文件去重 | python去除重复行
  11. 光谱分析软件_利用Tracker软件分析车前草提取液的吸收光谱特征
  12. PS打不开webp格式图片的解决方法
  13. 超棒工具8个高质量图标搜索引擎
  14. pip指定网址下载安装(清华源)
  15. 云计算、云服务器、云数据库和云存储基本介绍
  16. 基于uniapp的校园社区小程序
  17. 用单片机C语言开发雨滴智能屏小程序
  18. mix2s适配鸿蒙,小米MIX2S|MIUI10|9.05.12|GPU调节|CPU调节_最新最全的小米MIX 2SROM刷机包下载、刷机...
  19. 大学可以这样读——我的心路历程和一点思考
  20. 添加集控程序的守护进程一般操作【Linux,CentOS7.5】

热门文章

  1. centos(11)-ps进程管理
  2. 华为机试:计算最大乘积
  3. js刷新当前页的方法
  4. 在Mac系统中将html网页转成PDF格式
  5. ubuntu16.04,解决桌面右键菜单失效问题!
  6. 如何在安卓上android studio上构建本地服务器
  7. Nvidia Xavier平台CAN收发控制器调试记录
  8. 谷歌打开后开始页面被hao123篡改
  9. 快速下载官方网站软件
  10. 阿里云搭建MQTT服务器并进行本地和服务器端联通测试