vue2实现高德地图 JSAPI 2.0可拖拽的路线规划(DragRoute)组件实现对每个经过点设置不同的经过点名称
创始人
2025-05-29 14:45:53

vue2实现高德地图 JSAPI 2.0可拖拽的路线规划(DragRoute)组件实现对每个经过点设置不同的经过点名称

官方文档及示例

DragRoute相关API

API中没有任何方法让我们对每个经过点进行设置,所以只能我们自己实现

image-20230317163350154

实现效果如下:

image-20230317154134066

集成DragRoute到自己的组件

  1. 设置变量

    image-20230317154937284

  2. 引入DragRoute组件

    image-20230317155022084

  3. image-20230317155317539

以上步骤完成后就集成了DragRoute组件

对每个经过点设置不同的经过点名称

image-20230317160015595

_path中存储的数据如下图是一个LngLat对象,但是转换为json字符串后就是一个经纬度数组

image-20230317160642232

image-20230317160844078

父组件中

image-20230317160438249

      getRoutePath(childValue){this.form.routePathString=JSON.stringify(childValue)},

将数据库中的数据加载到重新加载到route中

image-20230317161550409

此处我将DragRoute的初始化单独抽取成了一个方法,

image-20230317161507500

此时其实已经完成了目的功能

但是存储到后端后再次加载地图所有的经过点的content都是一样的效果如下:

这是因为我们的路径点的content都在初始化时都被midMarkerOptions设置为相同的了

Snipaste_2023-03-15_16-41-59

解决路径点content相同问题

主要的思路是将route中的marker都重新修改content后再重新加载就可以实现了

image-20230317162434136

updateMindPointContext: function () {let pathList = this.route._listconsole.log(pathList)let startPoint = pathList[0]let endPoint = pathList[pathList.length - 1]let mindPoint = []pathList.forEach(item => {if (item.id != startPoint.id && item.id != endPoint.id) {mindPoint.push(item)}})let count = 1mindPoint.forEach(item => {item.marker._opts.label.content = '经过点' + countcount++item.marker.setContent('')//需要set一下上面代码才会生效})pathList = []pathList.push(startPoint)pathList.push(...mindPoint)pathList.push(endPoint)this.route._list = pathList},

然后我们在每次初始化时都调用此方法就解决了

image-20230317162511361

组件代码


父组件使用示例代码


相关内容

热门资讯

特斯拉FSD受监督版本在荷兰获... 4月11日消息,特斯拉当地时间10日发布消息称,全自动驾驶监督模式(FSD Supervised)已...
伊朗谈判代表团抵达巴基斯坦 4月11日消息,由伊朗议长卡利巴夫率领的伊朗谈判代表团当地时间11日凌晨抵达巴基斯坦伊斯兰堡,预计将...
伊朗官员称霍尔木兹海峡过去两天... 4月11日消息,伊朗议会国家安全委员会的一名成员在接受采访时表示,针对以色列违反停火协议并袭击黎巴嫩...
可孚医疗科技通过港交所上市聆讯 4月10日消息,可孚医疗科技股份有限公司更新聆讯后资料集,意味着该公司港交所IPO通过聆讯。(科股宝...
现货钯金下跌逾3% 4月10日消息,现货钯金下跌逾3%,至每盎司1,508.12美元。(广角观察)