h5端地图导航

 微信扫码打开是腾讯地图,其他扫码打开是百度地图

首先这里的经纬度坐标和地点是从后台传过来的,后台是使用百度地图定位的,这里在腾讯地图里显示时就需要进行转换,具体知识点请参考这篇文章:JS不同地图坐标系经纬度转换(天地图、高德地图、百度地图、腾讯地图)_天地图坐标和高德地图坐标系-CSDN博客

( 我的理解是有三种坐标标准,不同的坐标标准对应的坐标精度也会不同,所以要根据标准进行转换,以保证精准)

这里我会介绍两种方法,方法一是通过iframe直接链接引入,方法二是利用微信内置方法wx.openLocation唤起地图,这里第二种需要申请腾讯地图的key值,

建议使用方法二,因为方法一是在自己的域名下打开地图,这里跳百度地图软件会有一些问题

使用方法二直接在点击事件里面写就可以,不用单独新建一个页面,否则百度地图返回的时候会有一个空白页,此处是因为想显示的更清晰所以才放一个新页面展示。

方法一:参考的是这位博主的文章WEB端唤起 百度|腾讯|高德 地图一键导航功能_点击网页唤起百度地图并导航-CSDN博客

<template>
	<iframe v-if="iswexin" :src="'https://3gimg.qq.com/lightmap/v1/marker/index.html?marker=coord:'+points[0].lat+','+points[0].lng+';title:'+'导航'+';addr:'+actmessage.address" frameborder="0" style="width: 100%;height: 100vh;"></iframe>
	<iframe v-else :src="'https://api.map.baidu.com/marker?location='+JSON.parse(actmessage.lat)+','+JSON.parse(actmessage.lng)+'&title='+'导航'+'&content='+actmessage.address+'&output=html&src=webapp.baidu.openAPIdemo'" frameborder="0" style="width: 100%;height: 100vh;"></iframe>
</template>
<script setup>
	// 地址信息:里面有经纬度,具体地址
	let actmessage = JSON.parse(localStorage.getItem('actmessage'))
	let device = navigator.userAgent.toLowerCase()
	let iswexin = device.indexOf('micromessenger') != -1
	// 百度地图腾讯地图经纬度转换
	const bd_google_encrypt = (latlons) => {
		const x_pi = 3.14159265358979324 * 3000.0 / 180.0
		var point = [];
		for (const latlon of latlons) {
			var x = latlon.lng - 0.0065;
			var y = latlon.lat - 0.006;
			var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
			var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
			var gg_lon = z * Math.cos(theta);
			var gg_lat = z * Math.sin(theta);
			point.push({
				lat: gg_lat,
				lng: gg_lon
			})
		}
		return point;
	}
	const points = bd_google_encrypt([{lat:Number(JSON.parse(actmessage.lat)),lng:Number(JSON.parse(actmessage.lng))}])
</script>
<style></style>

方法二:

此方法需申请腾讯地图key值,否则会出现地图显示不出来,并报“Map key not configured”这个错。

申请网址:腾讯位置服务 - 立足生态,连接未来

步骤:① 先登录/注册,② 点击右上角【控制台】,③ 点击左侧【应用管理】下的【我的应用】,④ 创建应用,创建key值,⑤ 把key值粘进项目的下图中的位置

<template>
</template>
<script setup>
	// 地址信息:里面有经纬度,具体地址
	let actmessage = JSON.parse(localStorage.getItem('actmessage'))
	let device = navigator.userAgent.toLowerCase()
	let iswexin = device.indexOf('micromessenger') != -1
	// 百度地图腾讯地图经纬度转换
	const bd_google_encrypt = (latlons) => {
		const x_pi = 3.14159265358979324 * 3000.0 / 180.0
		var point = [];
		for (const latlon of latlons) {
			var x = latlon.lng - 0.0065;
			var y = latlon.lat - 0.006;
			var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
			var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
			var gg_lon = z * Math.cos(theta);
			var gg_lat = z * Math.sin(theta);
			point.push({
				lat: gg_lat,
				lng: gg_lon
			})
		}
		return point;
	}
	const initFn = ()=>{
		const points = bd_google_encrypt([{lat:Number(JSON.parse(actmessage.lat)),lng:Number(JSON.parse(actmessage.lng))}])
		// 微信浏览器-打开腾讯地图
		if(iswexin){
			wx.openLocation({
				latitude:points[0].lat,
				longitude:points[0].lng,
				address:actmessage.address,
				name:actmessage.address,
				scale: 16,
				infoUrl:'http://weixin.qq.com',
				fail:function(){
					window.location.href='https://api.map.baidu.com/marker?location='+JSON.parse(actmessage.lat)+','+JSON.parse(actmessage.lng)+'&title='+'导航'+'&content='+actmessage.address+'&output=html&src=webapp.baidu.openAPIdemo'
				},
				cancel:function(){
				}
			})
			return
		}else{
			//其他-打开百度地图
			window.location.href='https://api.map.baidu.com/marker?location='+JSON.parse(actmessage.lat)+','+JSON.parse(actmessage.lng)+'&title='+'导航'+'&content='+actmessage.address+'&output=html&src=webapp.baidu.openAPIdemo'
		}
	}
	initFn()
</script>
<style></style>

### 集成高德地图API实现导航功能 #### 获取高德地图Key 为了在UniApp H5页面中集成高德地图并实现导航功能,首先需要前往高德开放平台申请应用的key。特别注意,在创建应用时需针对Web(JS API)申请key,因为其他类型的key可能会导致key值不匹配错误[^1]。 #### 创建HTML结构 定义好页面的基础布局,确保有用于展示地图的容器: ```html <div id="container"></div> ``` #### 初始化地图实例 利用`<script>`标签引入高德地图JavaScript API,并初始化地图对象。由于部分uni-app内置方法可能无法正常工作于此场景下,因此推荐采用传统方式编写脚本逻辑并将所需参数传递给渲染层(renderjs)[^2]。 ```javascript // 引入高德地图API <script src="//webapi.amap.com/maps?v=1.4.15&key=您的密钥"></script> // 地图初始化函数 function initMap() { var map = new AMap.Map('container', { zoom: 10, // 设置缩放级别 center: [经度, 纬度], // 中心点坐标 }); } ``` #### 添加导航控件 为了让用户能够方便地发起路线规划请求,可以在界面上添加按钮或其他交互元素来触发导航操作。当点击这些元素时,调用AMapDriving或类似的接口完成路径计算与显示。 ```javascript document.getElementById('navigateButton').addEventListener('click', function () { var drivingOption = { policy: AMap.DrivingPolicy.LEAST_TIME, origin: '起点经纬度', destination: '终点经纬度' }; var driving = new AMap.Driving(drivingOption); driving.search(function (status, result) { if (status === 'complete') { console.log('成功绘制驾车线路'); } else { console.error('失败:', result.info); } }); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值