uniapp使用百度地图 (vue 使用 vue-baidu-map)及坐标转换

4 篇文章 0 订阅
2 篇文章 0 订阅

最近有个需求是对GPS的坐标在unaip中展示对坐标转化

因为拿到的是 GPS 坐标 uniapp 的map是腾讯的,但是腾讯的地图转换数据有限制和处理方面是异步,最后考虑用百度地图 。

需要

  1. 百度地图的key
  2. uniapp 安装 npm包 官网uniapp 咱装 npm包支持
  3. 了解百度地图 2.0 的参考类 百度地图参考类 地址

开始

  1. 若是 uniapp 项目没有使用 npm 管理依赖 ,需要先在项目根目录初始化npm 工程

初始化 npm 指令: npm init -y
判断项目是否使用npm管理依赖: 项目的根目录是否含有 package.json 文件
cli 项目的都是含有 package.json 的,但是HBuilderX创建的项目是默认没有的,需要通过指令来初始化

  1. 安装依赖 百度地图 Vue Baidu Map

指令: npm install vue-baidu-map --save
vue-baidu-map 是咱需要安装的包的名字

4.在项目引入 Vue Baidu Map
在这里插入图片描述

// 百度地图 调用百度
import BaiduMap from 'vue-baidu-map'
Vue.use(BaiduMap, {
  // ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */
  ak: 'fSH0tNa******gUWb2I' 
})
  1. 页面调用
    在这里插入图片描述
<!-- 展示地图 -->
		<view  class="map">
			<!-- <busmap :lineCode="lineCode" ></busmap> -->
			<baidu-map @ready="loadedMap" style="width: 750rpx; height:1100rpx;" :center="startposition" :zoom="15"
				:scroll-wheel-zoom="true">

				<!-- <bm-marker :position="startposition"  animation="BMAP_ANIMATION_BOUNCE"> -->
				<bm-navigation anchor="BMAP_ANCHOR_TOP_RIGHT"></bm-navigation>
				<bm-point-collection :points="polylinePaths" shape=" BMAP_POINT_SHAPE_WATERDROP" color="blue"
					size="BMAP_POINT_SIZE_BIG"></bm-point-collection>
				<bm-polyline :path="polylinePath" stroke-color="blue" :stroke-opacity="0.5" :stroke-weight="4">

				</bm-polyline>
				<!-- </bm-marker> -->
			</baidu-map>
		</view>

js部分:
注意: data内要有 百度地图内定义的参数


export default {
		data() {
			return {
				startposition: {
					lng: 116.404,
					lat: 39.915
				},
				polylinePaths: [{
						lng: 116.404,
						lat: 39.915
					},
					{
						lng: 116.405,
						lat: 39.920
					},
					{
						lng: 116.423493,
						lat: 39.907445
					},
				],
				polylinePath: [{
						lng: 116.404,
						lat: 39.915
					},
					{
						lng: 116.405,
						lat: 39.920
					},
					{
						lng: 116.423493,
						lat: 39.907445
					},
				], // 地图数据
				lineCode: '',
				items: ['地图'],
				buttonIndex: 0,
				scale: 16, //地图缩放比例
				}
					}
					}

vue-baidu-map 百度地图参考文档Vue Baidu Map 文档

  1. 经纬度坐标转换

因为接口返回的经纬度是 CPS 实际的经纬度,百度地图是百度自己的经纬度
需要对获取的经纬度进行处理,转化为百度的经纬度

convertor.translate(pointArr, 1, 5, translateCallbackAddStation);

  • 代码:
  1. 这里的 BMap类需要从 <baidu-map @ready=“loadedMap” > 的 ready的事件中获取
    在这里插入图片描述

// 初始化地图
			loadedMap({
				BMap,
				map
			}) {
				//创建地址解析器实例
				console.log(BMap, map, BMap.Convertor, "初始地图实例");
				this.sendLinePiontsRequest(BMap)  // 这个是获取线路的方法
				window.NNN = {
					BMap,
					map
				}
				convertor = new BMap.Convertor() // convertor 是一个全局的变量
			},

获取线路的方法

//获取线路 点数据
			async sendLinePiontsRequest(BMap) {
				let lineCode = this.lineCode
				uni.showLoading({
				     title: '正在加载',
				     mask: true
				})
				console.log("LinePiont获取lineCode: ", lineCode)
				let points = []

				request({
					contentType: 'application/json;charset=UTF-8',
					method: 'get',
					url: 'hyframe-webapp/phoneQuery/getLineStation?lineCode=' + lineCode,
					success: (res) => {
						uni.hideLoading();
						points = res
						let stationList = []
						console.log(res, "线路数据");
						let pointArr = [];
						for (let i = 0; i < res.stationList.length; i++) {

							if (res.stationList[i].sxx == 0) {

							// 坐标转化
								let point = new BMap.Point(res.stationList[i].lon * 1, res.stationList[i]
									.lat * 1)

								pointArr.push(point)

							}
						}
						// 回调  translateCallbackAddStation方法这个方法会获取到对应的转换后的百度坐标
						convertor.translate(pointArr, 1, 5, translateCallbackAddStation);
					
					},
					fail: (err) => {
						uni.hideLoading();
					}
				})
			},
			// 处理坐标的方法
		translateCallbackAddStation(point) {
				console.log(point);

				this.polylinePaths = point.points
				console.log(this.polylinePaths);
				this.startposition = point.points[0]
				this.getLineInflectionPoint()
			},
			

核心处理:

 let pointArr = [];
						for (let i = 0; i < res.stationList.length; i++) {
						
							if (res.stationList[i].sxx == 0) {


								let point = new BMap.Point(res.stationList[i].lon * 1, res.stationList[i]
									.lat * 1)

								pointArr.push(point)

							}
						}

						convertor.translate(pointArr, 1, 5, translateCallbackAddStation);
  • 思路再于 通过 BMap.convertor.translate进行转换
  • Convertor

用于将其他坐标系的坐标转换为百度坐标。

构造函数描述
Convertor()创建一个坐标转换的实例
方法描述
translate(points: Array<BMap.Point>, from: number, to: number, callback: function)对指定的点数组进行坐标转换,转换规则为从from到to,转换完成后调用callback,callback的参数为Object 。一次最多10个点,from和to的含义请参照Web服务API

在这里插入图片描述

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: vue-baidu-map是基于百度地图API开发的Vue组件,它能够在Vue项目中轻松地集成百度地图。而离线百度地图是指在没有网络连接的情况下能够使用百度地图。 正常情况下,百度地图需要联网才能显示地图和获取相关数据。但是在有些场景下,比如地下车库或者偏远山区等网络较差或者没有网络的地方,就无法正常使用百度地图。离线百度地图就是解决这个问题的解决方案,它通过事先将地图数据下载保存在本地,使得在没有网络连接的情况下也能够正常使用百度地图。 对于vue-baidu-map来说,它的离线功能也是很重要的。通过使用vue-baidu-map的离线百度地图,开发者可以轻松地针对不同的场景选择不同的地图方案,提高用户的使用体验。而且离线百度地图对于一些隐私性、安全性要求高的应用场景也更加有优势。 总之,vue-baidu-map离线百度地图是一个非常实用与方便的工具,在实际生产中可以提供更好的用户体验,也为开发者提供了更多的选择与便捷。 ### 回答2: vue-baidu-map离线百度地图是一款基于Vue.js框架开发的百度地图组件库,主要解决的是在无网络或网络不稳定的情况下,无法使用在线地图的问题。该组件库提供的离线地图可以在无网络的情况下正常使用,并且具有与在线地图相同的功能和可视化效果。 在vue-baidu-map离线百度地图组件中,我们可以使用百度地图提供的基础地图、卫星地图、混合地图等多种地图样式,并且支持地名搜索、地图缩放、位置探测、路线规划等常用功能。此外,在使用vue-baidu-map离线百度地图时,我们也可以通过添加自定义数据层、自定义覆盖层等方式,对地图进行更加丰富的扩展和定制。 总之,vue-baidu-map离线百度地图是一款非常实用的地图组件库,它可以帮助我们在网络不稳定或者无网络的情况下,依然可以正常使用百度地图,并且具有完整的百度地图功能和美观的地图样式。如果你正在建设一个应用程序,需要集成离线地图功能,那么vue-baidu-map离线百度地图可能正是你需要的工具。 ### 回答3: vue-baidu-map是一个可嵌入Vue.js网站的地图组件,它集成了百度地图的API,可以让开发者轻松实现地图功能。 离线百度地图指的是一种不需要联网即可使用百度地图,也就是地图数据被下载到本地储存设备上。vue-baidu-map支持使用离线地图,这就意味着用户可以在没有网络的环境下依然能够使用地图功能。 使用vue-baidu-map离线百度地图的优势在于,它提供了更好的用户体验和更高的灵活性。首先,用户无需担心网络不稳定、信号弱的问题,可以随时随地使用地图进行定位、浏览、搜索等操作;其次,开发者可以根据具体需求选择下载特定区域的地图数据,以减少数据流量和缩短加载时间;还可以根据不同需求切换在线地图和离线地图,达到最佳的用户体验。 总之,vue-baidu-map离线百度地图为开发者提供了便捷灵活的地图开发工具,让用户可以更加自由地使用地图服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值