uniapp使用高德地图微信小程序SDK生成地图轨迹

一、开发准备

1、下载微信小程序SDK

将微信小程序SDK下载到项目中就可以了,官网下载链接在下方显示

微信小程序SDK下载页面

2、高德控制台申请相关平台key

在这里插入图片描述

控制台

如果没有开发者账号的话,可以先去注册一个

二、html页面展示地图标签

<!-- latitude纬度  longitude经度  scale缩放等级  markers图标数据  polyline地图轨迹数据-->
<view>
	<map style="width: 750rpx; height: 100vh;" :latitude="latitude" 
		:longitude="longitude" scale="12" :markers="markers" :polyline="polyline">
	</map>
</view>

三、引入sdk及定义数据

// 引入微信小程序sdk
import amap from '@/gaodemap_sdk/amap-wx.js'

// 数据定义
// 地图实例
amapPlugin:null,
// 小程序高德地图key
key:'xxxxxxxxxxxxxxx',
// 图标点数据
markers: [{
  iconPath: "/static/imgs/location.png",
  id: 0,
  latitude: 39.989643,
  longitude: 116.481028,
  width: 23,
  height: 33
},{
  iconPath: "/static/imgs/location.png",
  id: 0,
  latitude:39.90816,
  longitude: 116.434446,
  width: 24,
  height: 34
}],
// 中心点
latitude: 39.954125,
longitude: 116.45664,	
// 地图轨迹数据
polyline:[],	

四、相关方法(静态生成两个点之间的轨迹数据)

获取到的地图轨迹数据也是一个点一个点的,这些点形成了一条轨迹

onLoad(options) {
	this.amapPlugin = new amap.AMapWX({
		key:this.key
	})
	var that = this
	// 静态死数据
	this.amapPlugin.getDrivingRoute({
      origin: '116.481028,39.989643',
      destination: '116.434446,39.90816',
      success: function(data){
        var points = [];
        // 通过一个点一个点生成地图轨迹数据
        if(data.paths && data.paths[0] && data.paths[0].steps){
          var steps = data.paths[0].steps;
          for(var i = 0; i < steps.length; i++){
            var poLen = steps[i].polyline.split(';');
            for(var j = 0;j < poLen.length; j++){
              points.push({
                longitude: parseFloat(poLen[j].split(',')[0]),
                latitude: parseFloat(poLen[j].split(',')[1])
              })
            } 
          }
        }
        that.polyline: [{
            points: points,   //地图轨迹数据
            color: "#0091ff",   //轨迹颜色
            width: 6   //线条宽度
          }]
      },
      fail: function(info){

      }
    })
},

五、相关方法(后端返回的轨迹数据)

onLoad(options) {
	this.amapPlugin = new amap.AMapWX({
		key:this.key
	})
	this.getTrackData()
}

获取地图轨迹数据,需要传递的数据看后台要求

// 获取轨迹数据
async getTrackData(){
	const { data:res } = await this.$myHttp({
		url:'device/locator/historicalTrack',
		data:{
			locator_code:'xxxxxxxxxxxxxx',  //设备id
		}
	})
	if(res.code == 200){
		// 创建一个空数组用于存放地图轨迹数据
		let arr = []
		res.data.map((item,index)=>{
			arr.push({
				longitude:item.baiduLng,
				latitude:item.baiduLat
			})
		})
		arr.map((item)=>{
			item = this.bd_decrypt(item.longitude,item.latitude)
		})
		this.polyline = [{
			points: arr,
			color: "#0091ff",   //轨迹颜色
			width: 6   // 轨迹线条的宽度
		}]
		// 改变图标坐标
		this.markers[0].latitude = arr[0].latitude
		this.markers[0].longitude = arr[0].longitude
		this.markers[1].latitude = arr[arr.length-1].latitude
		this.markers[1].longitude = arr[arr.length-1].longitude
		// 改变中心点
		this.latitude = arr[Math.floor(arr.length/2)].latitude
		this.longitude = arr[Math.floor(arr.length/2)].longitudex
	}else{
		uni.showToast({
			title:"获取运行轨迹失败",
			icon:"none",
			duration:1000
		})
	}
}

中间所用到的bd_decrypt方法是百度坐标转高德,因为后台的数据是百度坐标系的,如果数据是高德坐标奚的就可以不用转了。

//百度坐标转高德(传入经度、纬度)
bd_decrypt:function(bd_lng, bd_lat) {
    var X_PI = Math.PI * 3000.0 / 180.0;
    var x = bd_lng - 0.0065;
    var y = bd_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_lng = z * Math.cos(theta);
    var gg_lat = z * Math.sin(theta);
    return {longitude: gg_lng, latitude: gg_lat}
},

这样,通过微信小程序sdk生成的地图轨迹就渲染完成了,有问题的小伙伴可以评论区告诉我哦~

### 在 Vue3 中为 WangEditor 实现自定义菜单 为了在 Vue3 项目中集成并定制化 WangEditor 编辑器,可以按照如下方法操作: #### 安装依赖库 首先,在项目根目录下通过命令行工具安装 `wangeditor` 库。 ```bash npm install wangeditor@latest --save ``` #### 创建编辑器实例 接着创建一个新的组件来初始化 WangEditor 并设置其基本属性。这里展示了一个简单的例子,其中包含了如何引入和启动编辑器[^1]。 ```javascript // src/components/CustomWangEditor.vue <template> <div ref="editorElem"></div> </template> <script setup lang="ts"> import E from 'wangeditor'; import { onMounted } from "vue"; onMounted(() => { const editor = new E(this.$refs.editorElem); // 配置项... }); </script> ``` #### 自定义菜单配置 对于想要添加特定功能按钮的需求,则可以通过修改插件选项来自定义顶部工具栏中的菜单列表。下面是一个关于怎样向默认菜单组里追加新条目的说明[^3]。 ```typescript const editor = new Editor(editorElem); editor.config.menus = [ ...Editor.defaultConfig.menus, 'customMenu' // 新增的菜单名称 ]; editor.create(); // 注册新的菜单行为逻辑 editor.customConfig.onchange = (html) => { console.log('Change:', html); }; // 添加点击事件处理函数给新增的菜单项 editor.commands['customMenu'] = () => { alert('This is a custom menu!'); }; ``` 上述代码片段展示了如何扩展现有的菜单结构以及关联相应的交互动作。需要注意的是,实际开发过程中可能还需要进一步调整样式以适应页面布局需求。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值