【腾讯地图】录入经纬度功能 - 支持地图选点

embedded/2025/2/14 2:17:44/

目录

  • 效果展示
  • 代码
    • 引入地图服务地址
    • 弹框中输入框 - 支持手动输入经纬度/地图选点按钮
    • 地图选点弹框组件

当前文章 - 地图功能与 https://blog.csdn.net/m0_53562074/article/details/143677335 功能类似

效果展示

在这里插入图片描述

代码

引入地图服务地址

public/index.html

<!-- 互联网地图 -->
<script src="https://map.qq.com/api/gljs?v=2.exp&key=自己申请的key"></script><!-- 如果有用到编辑器 new TMap.tools.GeometryEditor() ,地图服务地址上查询参数要加 libraries=tools -->
<!-- https://map.qq.com/api/gljs?libraries=tools&v=2.exp&key=自己申请的key -->

弹框中输入框 - 支持手动输入经纬度/地图选点按钮

已删除无关代码,只展示地图选点相关代码

<template><el-dialogv-if="dialogVisible"title="弹框展示选点":visible.sync="dialogVisible":show-close="true"width="700px":close-on-click-modal="false":close-on-press-escape="false":before-close="handleClose"append-to-body><!-- ... --><div class="position"><el-input v-model="formData.position" placeholder="请输入勤务地点" size="mini" /><i class="iconfont ico-dituxuanze" @click="setPosition" /></div><SetPointMap ref="SetPointMapRef" @updatePoint="updatePointHandler" /></el-dialog>
</template><script>
// ...
import SetPointMap from './SetPointMap'export default {name: 'ResultEntry',components: { SetPointMap },data() {return {// /...formData: {position: ''},dialogVisible: false}},methods: {// ...showDetail() {this.dialogVisible = true},setPosition() {const { position } = this.formDataconst arr = position.split(/,|,/)const pointer = {jd: arr[0],wd: arr[1]}this.$refs.SetPointMapRef.open(pointer)},updatePointHandler({ jd, wd }) {this.formData.position = `${jd},${wd}`},handleClose() {// ...// 关闭弹窗this.dialogVisible = false}}
}
</script>
<style lang="scss" scoped>
// ....position {display: flex;.el-input {flex: 1;margin-right: 10px;}.iconfont {cursor: pointer;}
}
</style>

地图选点弹框组件

SetPointMap.vue

<!-- 地图选点 -->
<template><el-drawerv-if="drawerVisible"title="地图标注"size="65%"append-to-body:before-close="handleClose":visible.sync="drawerVisible"><div :id="idName" class="TMap" /></el-drawer>
</template><script>
import { mapGetters } from 'vuex'export default {name: 'SetPointMap',data() {return {drawerVisible: false,idName: 'setPointMap',map: null,multiMarker: null, // 点位图标point: {},clickPoint: {}}},computed: {...mapGetters(['sysConfigData'])},watch: {clickPoint: {handler(val) {if (val.jd) {this.$confirm(`确定标注以下经纬度吗?<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;经度 ${val.jd}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;纬度 ${val.wd}`,'提示',{confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning',dangerouslyUseHTMLString: true}).then((_) => {this.drawerVisible = falsethis.$emit('updatePoint', val)}).catch((_) => {this.$message.info('取消经纬度标注')this.clickPoint = {}})}}}},mounted() {this.initMap()},methods: {open(pointer) {this.drawerVisible = truethis.point = pointer // 保存初始经纬度},initMap() {var location = (this.sysConfigData.map_location || '121.427648,28.661939').split(',')this.map = new TMap.Map(this.idName, {zoom: this.sysConfigData.map_level || 14,center: new TMap.LatLng(Number(location[1]), Number(location[0]))})this.map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ROTATION) // 移除腾讯地图旋转控件this.map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ZOOM) // 移除腾讯地图缩放控件if (this.point.jd && this.point.wd) {// 将初始经纬度在地图上进行标点this.setPoint({ ...this.point }, true)}this.map.on('click', (e) => {// 点击地图获取经纬度this.removePoint() // 移除已有标点this.clickPoint = {jd: e.latLng.lat,wd: e.latLng.lng}// 点击位置进行标点this.setPoint({ ...this.clickPoint })})},setPoint({ jd, wd }, isSetCenter = false) {isSetCenter && this.map.setCenter(new TMap.LatLng(Number(jd), Number(wd)))this.MultiMarker = new TMap.MultiMarker({id: 'marker-layer',map: this.map,styles: {marker: new TMap.MarkerStyle({width: 25,height: 35,anchor: { x: 16, y: 32 }})},geometries: [{id: 'demo',styleId: 'marker',position: new TMap.LatLng(jd * 1, wd * 1),properties: {title: 'marker'}}]})},removePoint() {this.MultiMarker?.setMap(null)},handleClose(done) {this.$confirm('还有未保存的工作,确定关闭吗?').then((_) => {done()}).catch((_) => {})}}
}
</script><style lang='scss' scoped>
.TMap {width: 100%;height: 100%;
}::v-deep .el-drawer {.el-drawer__body {padding: 0;}
}
</style>

http://www.ppmy.cn/embedded/162027.html

相关文章

拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动

拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动 1. 前情&#xff1a; 1TB的硬盘&#xff0c;分了120G作ubuntu22.04。/boot: 300MB, / : 40GB, /home: 75G, 其余作swap area。 2. 一开始按这个教程&#xff1a;对我无效 https://blog.csdn.net/Eric_xkk/article/details/1…

java项目之基于用户兴趣的影视推荐系统设计与实现源码(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的基于用户兴趣的影视推荐系统设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于用户…

【C++学习篇】C++11第二期学习

目录 1. 可变参数模板 1.1 基本语法及原理 1.2 包扩展 1.3empalce系列接⼝ 2. lamba 2.1 lambda的语法表达式 2.2 捕捉列表 2.3 lamba的原理 1. 可变参数模板 1.1 基本语法及原理 1. C11⽀持可变参数模板&#xff0c;也就是说⽀持可变数量参数的函数模板和类模板&…

C++ 设计模式-适配器模式

适配器模式示例,包括多电压支持、类适配器实现、安全校验等功能: #include <iostream> #include <memory> #include <stdexcept>// 抽象目标接口:通用电源接口 class PowerOutlet {public:virtual ~PowerOutlet() = default;virtual int outputPower() c…

kafka了解-笔记

文章目录 kafka快速上手Kafka介绍Kafka快速上手理解Kafka的集群工作机制Kafka集群的消息流转模型 Kafka客户端小型流转流程客户端工作机制 kafka快速上手 Kafka介绍 MQ的作用 MQ&#xff1a;MessageQueue&#xff0c;消息队列&#xff0c;是一种FIFO先进先出的数据结构&#…

Spring Cloud 04 - 负载均衡和外部服务访问

Ribbon & Feign 文章目录 Ribbon & Feign一&#xff1a;Ribbon负载均衡1&#xff1a;介绍 2&#xff1a;ribbon的五大核心组件二&#xff1a;Feign外部接口访问1&#xff1a;Feign概述2&#xff1a;Feign vs OpenFeign3&#xff1a;使用示例3.1&#xff1a;注解支持3.2…

C语言——搜索:查找某个数的位置(遍历,二分查找……)

在 C 语言编程里&#xff0c;搜索某个数在数组或者数据集合中的位置是一项基础且重要的操作。 目录 一、遍历查找&#xff08;顺序查找&#xff09; 二、二分查找 三、插值查找 四、斐波那契查找 五、哈希查找 一、遍历查找&#xff08;顺序查找&#xff09; &#xff0…

JavaScript 中的防抖和节流,它们的区别是什么,以及如何实现?

在前端开发中&#xff0c;防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;是两种常用的优化高频率事件处理的技术。 它们能够有效减少事件处理函数的执行次数&#xff0c;从而提升页面性能和用户体验。 下面将详细解释这两种技术的概念、区别、…