当前位置: 首页 > news >正文

基于高德地图实现后端传来两点坐标计算两点距离并显示

对于地图的基础使用,一个很常见的功能是知道两点的坐标,计算两点的距离,这个目前来讲无法通过数学计算来实现,这里就要使用高德地图自带的api来实现

首先创建地图并且创建点

<template><div id="container"></div>
</template>
    window._AMapSecurityConfig = {securityJsCode: "23ffe9831a449eaf76f5b8158f5d4a77",};AMapLoader.load({key: "", // 申请好的Web端开发者Key,首次调用 load 时必填version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']}).then((AMap) => {map = new AMap.Map("container", {// 设置地图容器idviewMode: "3D", // 是否为3D地图模式zoom: 17, // 初始化地图级别center: [103.89143, 30.765383], // 初始化地图中心点位置layers: [// 卫星new AMap.TileLayer.Satellite(),// 路网// new AMap.TileLayer.RoadNet()],// mapStyle: "amap://styles/macaron", //设置地图的显示样式});createIcon(AMap, 'BS', "/map_icon/BS_icon.png", [25, 25], [0, 0], { lon: 103.89229, lat: 30.766229 }, [-15, -5])createIcon(AMap, 'UE', "/map_icon/UE_icon.png", [25, 25], [0, 0], { lon: map_data.map_data.lng, lat: map_data.map_data.lat }, [-15, -5])createIcon(AMap, 'beam', "/map_icon/beam.png", [50, 60], [0, 0], { lon: 103.89229, lat: 30.766229 }, [-28, 5])createIcon(AMap, 'BS_info', "/map_icon/BS_info.png", [120, 82], [0, 0], { lon: 103.89229, lat: 30.766229 }, [8, -35])ranging(AMap, map, point.value[0], point.value[1])UE_window_data.value = [{id: 0,title: '移动速度',content: `${map_data.map_data.speed}m/s`},{id: 1,title: '经度',content: `${point.value[1].getPosition().lng}°`},{id: 2,title: '纬度',content: `${point.value[1].getPosition().lat}°`},]create_window(AMap, map)}).catch((e) => {console.log(e);});

随后定义创建点的函数

/*** 创建一个 Icon* @param {AMap} AMap 高德地图对象* @param {string} iconUrl 图标取图地址* @param {Array} icon_size 图标尺寸* @param {Array} img_size 图标内图片大小* @param {Array} icon_offset 图标取图偏移量* @param {Object} position 图标位置* @param {Array} position_icon_offset 相对坐标点的偏移量*/
const createIcon = (AMap, marker_name, iconUrl, icon_size = [25, 34], icon_offset = [-9, -3], position, position_icon_offset = [-13, -30]) => {let startIcon = new AMap.Icon({// 图标尺寸size: new AMap.Size(icon_size[0], icon_size[1]),// 图标的取图地址image: iconUrl,// 图标所用图片大小imageSize: new AMap.Size(icon_size[0], icon_size[1]),// 图标取图偏移量imageOffset: new AMap.Pixel(icon_offset[0], icon_offset[1])});// 将 icon 传入 markermarker_name = new AMap.Marker({position: new AMap.LngLat(position.lon, position.lat),icon: startIcon,offset: new AMap.Pixel(position_icon_offset[0], position_icon_offset[1])});point.value.push(marker_name)map.add(marker_name);
}

接下来实现测距功能

/*** 该方法用于实现测距功能* @param {AMap} AMap 高德地图对象* @param {map} map 已经实例化的地图对象* @param {Point} m1 第一个点* @param {Point} m2 第二个点*/
const ranging = (AMap, map, m1, m2) => {console.log(map);// 添加测距功能let line = new AMap.Polyline({strokeOpacity: 1,strokeWeight: 0.1,strokeColor: '#80d8ff',isOutline: true,borderWeight: 2,outlineColor: '#80d8ff'});line.setMap(map);let text = new AMap.Text({text: '',style: {'background-color': 'rgba(0,0,0,0.4)','border-color': 'rgba(0,0,0,0)','font-size': '12px'}});text.setMap(map)function computeDis() {console.log(m2.getPosition());let p1 = m1.getPosition();let p2 = m2.getPosition();let textPos = p1.divideBy(2).add(p2.divideBy(2));let distance = Math.round(p1.distance(p2));let path = [p1, p2];line.setPath(path);text.setText('两点相距' + distance + '米')text.setPosition(textPos)}computeDis();
}

构建自定义信息窗体

let UE_window_data = ref([])const create_window = (AMap, map) => {let infoWindow = new AMap.InfoWindow({isCustom: true,  //使用自定义窗体content: createInfoWindow(),offset: new AMap.Pixel(-90, 70)});infoWindow.open(map, point.value[1].getPosition());
}//构建自定义信息窗体
function createInfoWindow() {let info = document.createElement("div");info.className = "ue_info";let window_title = document.createElement("div");window_title.className = "window_title";let window_title_icon = document.createElement("div");window_title_icon.className = "window_title_icon";let window_title_content = document.createElement("div");window_title_content.className = "window_title_content";window_title_content.innerHTML = 'UE小车';window_title.appendChild(window_title_icon);window_title.appendChild(window_title_content);info.appendChild(window_title);for (let i = 0; i < UE_window_data.value.length; i++) {let ue_title = document.createElement("div");let ue_value = document.createElement("div");let title = `${UE_window_data.value[i].title}`let value = `${UE_window_data.value[i].content}`ue_title.innerHTML = title;ue_value.innerHTML = value;ue_title.className = "single_ue_box dark";ue_value.className = "single_ue_box light";info.appendChild(ue_title);info.appendChild(ue_value);}return info;
}

最后销毁地图

onUnmounted(() => {map?.destroy();
});

看看最终效果


文章转载自:

http://PrfdPSni.ktqtf.cn
http://ixgnsILo.ktqtf.cn
http://hcr9UH71.ktqtf.cn
http://8DAiDceH.ktqtf.cn
http://d5RYhsOa.ktqtf.cn
http://edisAj5F.ktqtf.cn
http://a4ozTAaQ.ktqtf.cn
http://7r1WgDa4.ktqtf.cn
http://nPE1YDRe.ktqtf.cn
http://PAgIupHX.ktqtf.cn
http://AdvS4dD3.ktqtf.cn
http://oZsPObd7.ktqtf.cn
http://RzZXvPFv.ktqtf.cn
http://qUdKuv0i.ktqtf.cn
http://ds5UkpsY.ktqtf.cn
http://e384rt0g.ktqtf.cn
http://7e4o722A.ktqtf.cn
http://M4sMavhu.ktqtf.cn
http://SwoNM7Rm.ktqtf.cn
http://9dvLKcGM.ktqtf.cn
http://wZdpjnrP.ktqtf.cn
http://Uluz9HQ0.ktqtf.cn
http://Pa0djZKV.ktqtf.cn
http://S6O4X21o.ktqtf.cn
http://9RNCFXO5.ktqtf.cn
http://tOtOeMfX.ktqtf.cn
http://cmF9Yr64.ktqtf.cn
http://D5YJ5yax.ktqtf.cn
http://a9A6GkoC.ktqtf.cn
http://FY3eoyJn.ktqtf.cn
http://www.dtcms.com/a/363605.html

相关文章:

  • JDK16安装步骤及下载(附小白详细教程)
  • 【Spring Cloud微服务】9.一站式掌握 Seata:架构设计与 AT、TCC、Saga、XA 模式选型指南
  • Javascript》》JS》》ES6》 Map、Set、WeakSet、WeakMap
  • Java 技术支撑 AI 系统落地:从模型部署到安全合规的企业级解决方案(一)
  • SQL分类详解:掌握DQL、DML、DDL等数据库语言类型
  • Java-Spring入门指南(二)利用IDEA手把手教你如何创建第一个Spring系统
  • Python学习-day4
  • win32diskimager强行缩减TF卡镜像制作尺寸的方法
  • Zynq中级开发七项必修课-第四课:S_AXI_HP0 高速端口访问 DDR
  • 整理期初数据用到的EXCEL里面的函数操作
  • 2026届长亭科技秋招正式开始
  • 炫酷JavaScript鼠标跟随特效
  • Nano Banana 新玩法超惊艳!附教程案例提示词!
  • CMake构建学习笔记23-SQLite库的构建
  • SQL Server 数据库创建与用户权限绑定
  • 构建下一代智能金融基础设施
  • 网络编程 05:UDP 连接,UDP 与 TCP 的区别,实现 UDP 消息发送和接收,通过 URL 下载资源
  • 网络传输的实际收发情况及tcp、udp的区别
  • python 创建websocket教程
  • 异常处理小妙招——1.别把“数据库黑话”抛给用户:论异常封装的重要性
  • GitHub每日最火火火项目(9.2)
  • 使用谷歌ai models/gemini-2.5-flash-image-preview 生成图片
  • Python/JS/Go/Java同步学习(第一篇)格式化/隐藏参数一锅端 四语言输出流参数宇宙(附源码/截图/参数表/避坑指南/老板沉默术)
  • 下载速度爆表,全平台通用,免费拿走!
  • Linux中断实验
  • VibeVoice 部署全指南:Windows 下的挑战与完整解决方案
  • 为什么需要锁——多线程的数据竞争是怎么引发错误的
  • 梯度消失问题:深度学习中的「记忆衰退」困境与解决方案
  • 从C语言入门到精通:代码解析与实战
  • 零知开源——STM32红外通信YS-IRTM红外编解码器集成灯控与显示系统