uniapp h5端地图导航功能

news/2025/2/5 8:03:06/

效果如下图:
在首页点击一键导航,地址栏带着目标地点的地址名称跳转到一键导航的页面,
在这里插入图片描述

点击开始导航,调起3种地图列表供选择
在这里插入图片描述
一键导航页面的相关代码如下:

<template><view class="container"><view class="content"><map :scale="14" :show-location="true" :show-compass="true" class="map-content":latitude="position.latitude" :longitude="position.longitude" :markers="markers" @markertap="handleOpen"@callouttap="handleOpen" /><view class="map-btn" @click="handleOpen">开始导航</view></view></view>
</template><script>export default {data() {return {countryName:'',//地址名position: {latitude: '',longitude: '',name: '',address: ''},}},components: {},props: {},computed: {markers() {const {longitude,latitude} = this.position;return [{id: 0,latitude, //纬度longitude, //经度iconPath: '../../static/img/index/map.png', //显示的图标rotate: 0, // 旋转度数width: 28, //宽height: 40, //高title: '标记位置', //标注点名alpha: 0.5, //透明度callout: {//自定义标记点上方的气泡窗口 点击有效content: this.position.name, //文本padding: 10,color: '#3D3D3D', //文字颜色fontSize: "36rpx", //文本大小borderRadius: 10, //边框圆角bgColor: '#fff', //背景颜色display: 'ALWAYS', //常显}}];}},/*** 生命周期函数--监听页面加载*/onLoad: function(options) {console.log(options)//此处暂时写死,方便使用,按逻辑是从地址栏里获取到的地址名称options.countryName = '天安门广场' this.countryName = options.countryName || ''this.position.name = this.countryNamethis.convert()//根据地址名称获取坐标},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function() {},/*** 生命周期函数--监听页面显示*/onShow: function() {},/*** 生命周期函数--监听页面隐藏*/onHide: function() {},/*** 生命周期函数--监听页面卸载*/onUnload: function() {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function() {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function() {},methods: {// 根据地址名称获取坐标//(!!convert() 此方法是为了后台没有返回经纬度坐标时,前台通过地址名称自己获取坐标!!)convert() {// 新建一个正逆地址解析类//!!!!!UniApp调用腾讯地图TMap的方法在下一篇有详细讲解!!!!!!let geocoder = new TMap.service.Geocoder(); // 将给定的地址转换为坐标位置geocoder.getLocation({address: this.countryName}).then((result) => {this.position.longitude = result.result.location.lngthis.position.latitude = result.result.location.lat});},// 选择地图handleOpen() {let that = thisuni.showActionSheet({itemList: ['高德地图', '百度地图', '腾讯地图'],success: function(res) {that.guide(res.tapIndex)},fail: function(res) {console.log(res.errMsg);}});},guide(signMap) {uni.showLoading({title: '跳转中'});let {position} = this;if (position.name && position.name != '') {//地点位置position.name 地点经纬度lng latvar lng = position.longitude;var lat = position.latitude;if (signMap == 0) {// 高德地图uni.getSystemInfo({success: (res) => {if (res.platform === "android") {window.location.href ="androidamap://viewMap?sourceApplication=appname&poiname=" + position.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";//判断是否跳转setTimeout(function() {let hidden = window.document.hidden || window.document.mozHidden || window.document.msHidden || window.document.webkitHiddenif (typeof hidden == "undefined" || hidden == false) {//调用高德地图window.location.href ="https://uri.amap.com/marker?position=" + lng + "," +lat + "&name=" + position.name;}}, 2000);} else {window.location.href ="iosamap://viewMap?sourceApplication=appname&poiname=" + position.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";//判断是否跳转setTimeout(function() {let hidden = window.document.hidden || window.document.mozHidden || window.document.msHidden || window.document.webkitHiddenif (typeof hidden == "undefined" || hidden == false) {//调用高德地图window.location.href ="https://uri.amap.com/marker?position=" + lng + "," +lat + "&name=" + position.name;}}, 2000);}}})} else if (signMap == 1) {// 百度地图uni.getSystemInfo({success: (res) => {if (res.platform === "android") {let d = new Date();let t0 = d.getTime();window.location.href ="androidamap://viewMap?sourceApplication=appname&poiname=" + position.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";//由于打开需要1~2秒,利用这个时间差来处理--打开app后,返回h5页面会出现页面变成app下载页面,影响用户体验var delay = setInterval(function() {var d = new Date();var t1 = d.getTime();if (t1 - t0 < 3000 && t1 - t0 > 2000) {window.location.href ="http://api.map.baidu.com/marker?location=" + lat +"," + lng + "&title=" + position.name +"&content=地点&output=html&src=webapp.baidu.openAPIdemo";}if (t1 - t0 >= 3000) {clearInterval(delay);}}, 1000);} else {let d = new Date();let t0 = d.getTime();window.location.href ="iosamap://viewMap?sourceApplication=appname&poiname=" + position.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";//由于打开需要1~2秒,利用这个时间差来处理--打开app后,返回h5页面会出现页面变成app下载页面,影响用户体验let delay = setInterval(function() {var d = new Date();var t1 = d.getTime();if (t1 - t0 < 3000 && t1 - t0 > 2000) {window.location.href ="http://api.map.baidu.com/marker?location=" + lat +"," + lng + "&title=" + position.name +"&content=地点&output=html&src=webapp.baidu.openAPIdemo";}if (t1 - t0 >= 3000) {clearInterval(delay);}}, 1000);}}})} else {// 腾讯地图uni.getSystemInfo({success: (res) => {if (res.platform === "android") {window.location.href ="androidamap://viewMap?sourceApplication=appname&poiname=" + position.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";//判断是否跳转setTimeout(function() {let hidden = window.document.hidden || window.document.mozHidden || window.document.msHidden || window.document.webkitHiddenif (typeof hidden == "undefined" || hidden == false) {//调用腾讯地图window.location.href =`https://apis.map.qq.com/uri/v1/marker?marker=coord:(${lat},${lng})&addr:${position.name}`}}, 2000);} else {window.location.href ="iosamap://viewMap?sourceApplication=appname&poiname=" + position.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";//判断是否跳转setTimeout(function() {let hidden = window.document.hidden || window.document.mozHidden || window.document.msHidden || window.document.webkitHiddenif (typeof hidden == "undefined" || hidden == false) {//调用高德地图window.location.href =`https://apis.map.qq.com/uri/v1/marker?marker=coord:(${lat},${lng})&addr:${position.name}`}}, 2000);}}})}} else {uni.showToast({title: '暂不知道该地点位置',icon: 'none',duration: 2000,});}setTimeout(function() {uni.hideLoading();}, 2000);},}}
</script><style>.container {}/* 内容 */.content {}.map-content {width: 100%;height: calc(100vh - 80rpx);}.map-btn {width: 710rpx;height: 88rpx;line-height: 88rpx;border-radius: 60rpx;background: #CE3B34;color: #fff;text-align: center;position: fixed;bottom: 24rpx;left: 20rpx;font-size: 32rpx;}
</style>

http://www.ppmy.cn/news/593985.html

相关文章

微信小程序地图导航

1.使用腾讯地图获取地点的经纬度 官方坐标获取&#xff1a;https://lbs.qq.com/getPoint/ 如&#xff1a;重庆解放碑 纬度&#xff1a;29.557284 经度&#xff1a;106.577153 2.使用微信小程序的内置地图。 微信小程序文档&#xff1a;https://developers.weixin.qq.com/mi…

在线地图服务:

注意http和https的问题 天地图 //底图 https://t1.tianditu.gov.cn/DataServer?Timg_w&X{x}&Y{y}&L{z}&tk6557fd8a19b09d6e91ae6abf9d13ccbd, https://t2.tianditu.gov.cn/DataServer?Timg_w&X{x}&Y{y}&L{z}&tk6557fd8a19b09d6e91ae6abf9d…

uniapp地图导航

打开腾讯地图&#xff1a;https://map.qq.com/ 选择地图API 然后获得到一个KEY字符串&#xff0c;查询地址时用到 选择开发文档&#xff0c;下载qqmap-wx-jssdk.js 查看地址导航 // 获取经纬度getLocation() {// 实例化API核心类 var qqmapsdk new QQMapWX({key: this.key //…

H5页面调起地图导航

h5页面拉起地图导航 • 新年快乐&#xff0c;在此㊗️大家万事如意&#xff0c;牛气冲天&#xff01; 这里再次记录下&#xff0c; 在vue中使用百度地图&#xff0c;点击marker弹窗选择对应导航方式。 文章目录 h5页面拉起地图导航效果图拉起导航方式1. 高德地图2. 百度地图3.…

方案设计-实现地图导航

来源&#xff1a;http://t.cn/EbMSlGi 数据获取 图的二维数组展现 Dijkstra 代码的实现 优化 尾巴 现在的公共交通越来越方便&#xff0c;很多城市都有地铁&#xff0c;日常使用的地图 App 都提供了地铁线路换乘方案的功能&#xff0c;只要输入起点和终点&#xff0c;App…

手机地图导航测试用例

外观测试; 1.屏幕显示不能有花屏、黑点和闪屏&#xff0c;清晰度、亮度、颜色要正常。 2.检测所有按键都能起到相应作用&#xff0c;是否手感不良。 3.UI显示状态、颜色、清晰度、效果。 控制&#xff1a;放大&#xff0c;缩小&#xff0c;音量调节功能测试&#xff1a; 1.交叉…

【地图导航】Cesium+Vue实战教程

Hello&#xff0c;大家好&#xff0c;这里是在宿舍呆着&#xff0c;避免成为小阳人的GIS宇宙。要说WebGIS比较火的库当初Cesium.js了&#xff0c;基于二维三维地图展示&#xff0c;结合Threejs可以做一些炫酷的特效&#xff0c;常用于智慧城市比如智慧水利、智慧政务等等啊&…

地图展示与导航

iOS中的地图和调用系统的高德地图进行导航 主要用到两个框架&#xff1a;MapKit.framework主要用于地图的展示和coreLocaton.framework主要用于地理位置信息的处理 地图展示(MapKit.framework) 1.自定义大头针方便后续使用 遵守MKAnnotation协议&#xff0c;重写title等属…