基于高德地图实现地图交互功能的探索与总结
在前端开发项目中,集成地图功能并实现丰富的交互效果是一项具有挑战性但又极具实用价值的任务。最近,我在项目里负责实现基于高德地图的相关功能,包括地图初始化、输入提示、点击获取经纬度及地址等操作。在这个过程中,遇到了不少问题,经过一番钻研和实践,终于逐一解决,现在将这段经历总结出来,希望能帮助到有同样困惑的开发者。
一、功能需求概述
项目要求在页面中嵌入地图,用户能够通过输入地址关键词搜索地点,地图自动定位到该地点并显示其经纬度。同时,用户点击地图上任意位置,也能获取该点的经纬度,并通过逆地理编码将经纬度转换为详细地址显示在输入框中。此外,为了优化用户体验,还需要处理页面和特定元素滚动时相关地图提示元素的显示与隐藏问题。
二、实现过程中的关键代码及问题解决
(一)地图初始化
function atlas(lng, lat) {console.log(lng);console.log(lat);// 1. 定义一个变量保存地图的初始位置var defaultCenter = [lng, lat]; // 默认中心点(例如郑州的经纬度)var map = new AMap.Map("container", {center: defaultCenter, // 设置地图默认中心点zoom: 12, // 设置地图默认缩放级别resizeEnable: true});
在初始化地图时,我遇到的第一个问题是如何根据传入的经纬度设置地图的初始中心点。通过查阅高德地图的官方文档,了解到可以在创建 AMap.Map
实例时,通过 center
属性来指定地图的中心点坐标。这里我将传入的 lng
和 lat
组成数组赋值给 defaultCenter
变量,然后设置为地图的中心点。另外,zoom
属性用于设置地图的初始缩放级别,resizeEnable
确保地图容器大小改变时地图能自适应调整。
(二)输入提示功能
// 输入提示
var autoOptions = {input: "tipinput"
};AMap.plugin(['AMap.PlaceSearch', 'AMap.AutoComplete', 'AMap.Geocoder', 'AMap.Marker'], function() {var auto = new AMap.AutoComplete(autoOptions);var placeSearch = new AMap.PlaceSearch({map: map}); // 构造地点查询类var geocoder = new AMap.Geocoder(); // 构造地理编码对象var marker = new AMap.Marker({position: defaultCenter,map: map}); // 初始化时添加标记auto.on("select", select); // 注册监听,当选中某条记录时会触发function select(e) {placeSearch.setCity(e.poi.adcode);placeSearch.search(e.poi.name); // 关键字查询查询}placeSearch.on("complete", function(results) {if (results.info === 'OK') {var firstResult = results.poiList.pois[0];var location = firstResult.location;// 可以将经纬度存储到变量中,方便后续使用$('#lng').val(location.lng);$('#lat').val(location.lat);} else {console.error("地址查询失败");}});
实现输入提示功能时,最大的困扰在于理解和整合高德地图提供的多个插件。首先,定义了 autoOptions
对象,指定输入框的 id
为 tipinput
,用于关联输入提示功能与页面上的输入框。通过 AMap.plugin
方法加载所需的插件,包括 AMap.PlaceSearch
(地点查询)、AMap.AutoComplete
(输入提示)、AMap.Geocoder
(地理编码)和 AMap.Marker
(标记)。创建 AMap.AutoComplete
实例并监听其 select
事件,当用户在输入提示列表中选择某个地点时,获取该地点的城市编码和名称,调用 placeSearch
的 search
方法进行地点查询。查询完成后,如果结果状态为 OK
,则获取第一个查询结果的经纬度,并将其存储到页面的 lng
和 lat
输入框中。
(三)点击地图获取经纬度和地址
// 点击地图获取经纬度和地名
map.on('click', function(e) {var lnglat = e.lnglat;$('#lng').val(lnglat.getLng());$('#lat').val(lnglat.getLat());// 使用逆地理编码将经纬度转换为地址geocoder.getAddress(lnglat, function(status, result) {if (status === 'complete' && result.info === 'OK') {var address = result.regeocode.formattedAddress;$('#tipinput').val(address);} else {console.error("逆地理编码失败");}});// 添加标记点if (marker) {marker.setMap(null); // 移除之前的标记点}marker = new AMap.Marker({position: lnglat,map: map});
});
在实现点击地图获取经纬度和地址功能时,需要借助地理编码插件 AMap.Geocoder
。监听地图的 click
事件,获取点击位置的经纬度 lnglat
,将其存储到页面输入框中。然后调用 geocoder.getAddress
方法进行逆地理编码,将经纬度转换为详细地址。如果编码成功,将地址显示在输入框 tipinput
中。为了在地图上标记用户点击的位置,每次点击地图时,先移除之前的标记点(如果存在),然后在新的点击位置创建一个新的标记点。这里遇到的问题主要是对逆地理编码方法的参数和返回值理解不够清晰,经过反复查阅文档和测试,才正确实现了功能。
(四)滚动事件处理
window.addEventListener('scroll', function() {if (window.pageYOffset > 1) { // 当页面滚动超过 100px 时隐藏元素$('.amap-sug-result').hide();}
});$('.among').on('scroll', function() {console.log('元素正在滚动');$('.amap-sug-result').hide();// 这里可以添加更多针对元素滚动时的操作逻辑,比如动态修改元素内的样式等
});
处理滚动事件时,目标是在页面或特定元素滚动时隐藏地图的输入提示结果框(amap-sug-result
)。通过监听 window
的 scroll
事件,当页面滚动距离超过 1px 时,隐藏输入提示结果框。同时,针对特定元素 among
的滚动事件,也进行了相同的处理。在这个过程中,需要注意事件绑定的对象以及隐藏元素的选择器是否正确,确保功能按预期实现。
三、总结与展望
通过这次对基于高德地图的地图交互功能的开发,我对地图 API 的使用有了更深入的理解。在解决问题的过程中,不断查阅文档、参考官方示例以及在社区中寻求帮助,逐步攻克了一个又一个难题。未来,我计划进一步优化这些功能,比如增加更多的地图交互操作,如绘制多边形、添加路线规划等。同时,持续关注地图技术的发展,学习如何更好地利用地图数据为用户提供更优质的服务。希望我的这些经验总结能够为其他开发者在类似功能开发中提供一些参考和启发,让大家少走一些弯路。
相关文章:
基于高德地图实现地图交互功能的探索与总结
在前端开发项目中,集成地图功能并实现丰富的交互效果是一项具有挑战性但又极具实用价值的任务。最近,我在项目里负责实现基于高德地图的相关功能,包括地图初始化、输入提示、点击获取经纬度及地址等操作。在这个过程中,遇到了不少…...
代码随想录算法训练营--打卡day4
一.移除链表元素 1.题目链接 203. 移除链表元素 - 力扣(LeetCode) 2.思路 通过 while 循环来遍历链表,只要 cur 的下一个节点不为空,就继续循环。在循环中,对 cur 的下一个节点的值进行判断: 值不等于…...
【题解】AtCoder At_abc399_d [ABC399D] Switch Seats
题目大意 请点击 这里 查看原题面。 有一个长度为 2 ⋅ N 2\cdot N 2⋅N 的序列 A A A,其中 1 , 2 , … , N 1,2,\dots,N 1,2,…,N 各出现了两次。现在要找满足如下条件的数对 ( a , b ) (a,b) (a,b) 的个数: a a a 的两次出现不相邻。 b b b 的两…...
【力扣刷题|第十七天】0-1 背包 完全背包
目标和 力扣题目网址:目标和 这道题我们先用回溯的思想来做。首先我们设正数和为S,数组和为N,目标值为T,那么S-(N-S)T化简之后可以得S(TN)/2即选择的正数个数为偶数,而且NT也为偶数,那么第一个判断条件我们就有了&…...
实时目标检测新突破:AnytimeYOLO——随时中断的YOLO优化框架解析
目录 一、论文背景与核心价值 二、创新技术解析 2.1 网络结构革新:Transposed架构 2.2 动态路径优化算法 三、实验结果与性能对比 3.1 主要性能指标 3.2 关键发现 四、应用场景与部署实践 4.1 典型应用场景 4.2 部署注意事项 五、未来展望与挑战 一、论文背景与核心…...
Spring中的IOC及AOP概述
前言 Spring 框架的两大核心设计思想是 IOC(控制反转) 和 AOP(面向切面编程)。它们共同解决了代码耦合度高、重复逻辑冗余等问题。 IOC(控制反转) 1.核心概念 控制反转(Inversion of Control…...
为mariadb和mysql添加用户和修改密码的方法
一、查看MariaDB中的用户 步骤1:登录MariaDB sudo mysql -u root -p # 使用root账户登录(输入密码) 步骤2:查询用户列表 -- 切换到mysql系统数据库 USE mysql; -- 查看所有用户及其主机权限 SELECT User, Host FROM user; 输出…...
2025年3月电子学会c++五级真题
结绳 #include <bits/stdc.h> using namespace std;int n,a[10010];int main() {cin>>n;for(int i 0;i<n;i){cin>>a[i];}sort(a0,an);//将a数组从小到大排序double sum 0;for(int i 0;i<n;i){sum (suma[i])/2;}cout<<(int)sum;return 0; } 最…...
JSP 指令
JSP 指令 概述 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,从而实现动态内容的生成。JSP指令是JSP页面中用于设置整个页面属性的特殊标记,它们对整个JSP页面或部分页面进行配置…...
RabbitMQ高级特性--发送方确认
目录 1. confirm确认模式 1.配置RabbitMQ 2.设置确认回调逻辑并发送消息 2.Return退回模式 1.配置RabbitMQ 2.设置返回回调逻辑并发送消息 在使用RabbitMQ的时候, 可以通过消息持久化来解决因为服务器的异常崩溃而导致的消息丢失, 但是还有⼀个问题, 当消息的生产者将消息发送出…...
AUTOSAR_StbM_详解
AUTOSAR同步时基管理器(StbM)详解 基于AUTOSAR规范对StbM模块架构与功能的全面解析 目录 AUTOSAR同步时基管理器(StbM)详解 目录1. 概述 1.1 StbM的功能与用途1.2 StbM的主要用例2. 组件架构 2.1 StbM组件架构图2.2 组件交互说明 2.2.1 客户类型2.2.2 内部组件2.2.3 外部接口3.…...
扩散模型总结
目录 定义与原理 发展历程 正向扩散过程 反向扩散过程 噪声预测网络 离散时间模型 连续时间模型 条件扩散模型 生成质量 训练稳定性 采样灵活性 图像生成 音频合成 文本生成 计算效率 模型复杂度 定义与原理 扩散模型是一种新型的生成模型,其核心原理源于热力…...
RCE--解法
目录 一、利用php伪协议 1.代码分析 2.过程 3.结果 编辑 4.防御手段 二、RCE(php中点的构造) 1.代码分析 2.过程 一、利用php伪协议 <?php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag|system|php|cat|sort…...
Kubernetes》k8s》Containerd 、ctr 、cri、crictl
containerd ctr crictl ctr 是 containerd 的一个客户端工具。 crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。 ctr -v 输出的是 containerd 的版本, crictl -v 输出的是当前 k8s 的版本&#x…...
OpenCV 图形API(2)为什么需要图形API?
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 G-API背后的动机 G-API模块为OpenCV带来了基于图的执行模型。本章简要描述了这种新模型如何在两个方面帮助软件开发者:优化和移植图像处理算法…...
测试模版12
本篇技术博文摘要 🌟 引言 📘 在这个变幻莫测、快速发展的技术时代,与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮,一名什么都会一丢丢的网络安全工程师,也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…...
Epoll 的本质与原理:高性能网络编程的基石
Epoll 的本质与原理:高性能网络编程的基石 在当今高并发的网络应用中,如何高效地处理大量的并发连接是每个开发者都需要面对的关键问题。Linux 系统提供的 epoll 技术正是解决这一问题的利器,被广泛应用于 Nginx、Redis、Skynet 等高性能网络…...
Tesseract OCR技术初探(Python调用)
一、Tesseract OCR技术解析 1.1 核心架构与发展历程 Tesseract是由HP实验室于1985年研发的光学字符识别引擎,2005年由Google开源并持续维护至今。其核心技术经历了三个阶段演进: 传统模式(v3.x):基于特征匹配算法&a…...
黑盒测试的测试用例构成的八点要素
测试用例: 是为测试项目而设计的执行文档 作用: 防止漏测实施测试的标准 编写格式: 用例编号:项目 模块 编号用例标题:预期结果(测试点)模块/项目:所属项目或模块优先级:表示用例的重要程度或者影响力P0~p4(P0最高)前置条件:要执行此条用例…...
手撕string
目录 引言 1,成员变量 2,先建一个可以跑的 2_1,构造函数 2_2, 扩容函数reserve 2_3,push_back 2_4,append[ ] 2_5,operator << 2_6,测试一下,看猪跑 3&…...
12款星光闪光污迹艺术绘画效果Clip Studio Paint笔刷画笔+闪光纹理图片 Clip Studio Glitter Texture Brushes
这 12 种 Clip Studio 画笔 额外的闪光纹理包含闪光、污迹、星光和闪亮的斑点,为您的艺术增添额外的流行感。想想闪光胶,但已经长大了(而且更好)。想象一下:无论您是用微小的闪光还是厚实的微光涂鸦,都有适…...
5G_WiFi_CE_杂散测试
目录 一、规范要求 1、法规目录: 2、限值: (1)带外发射杂散 (2)带内发射杂散 (3)接收杂散 二、测试方法 1、带外发射杂散 (1)测试条件 (…...
蓝卓为中小制造企业注入数字化转型活力
随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加,市场竞争越来越激烈,传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识,在数字化的进程中,中小企业首要考虑生存问题,不能…...
集成 shardingsphere-jdbc 常见问题
一、报错内容 Caused by: org.apache.ibatis.executor.ExecutorException: Error preparing statement. Cause: org.apache.shardingsphere.infra.exception.kernel.metadata.TableNotFoundException: Table or view t_xxx does not exist. 解决 1、配置 !SHARDING rules:-…...
DeepSeek接入飞书多维表格,效率起飞!
今天教大家把DeepSeek接入飞书表格使用。 准备工作:安装并登录飞书;可以准备一些要处理的数据,确保数据格式正确,如 Excel、CSV 等,也可直接存储到飞书多维表格。 创建飞书多维表格:打开飞书,点…...
AI来了,新手如何着手学习软件开发?
AI时代新手学习软件开发的7步进化指南 (附具体工具与避坑策略) 一、建立“人机协作”学习观 AI是教练,不是替身 正确姿势:用AI辅助理解概念(如让DeepSeek 、ChatGPT用生活案例解释递归),但坚持手…...
sqli-labs靶场 less5
文章目录 sqli-labs靶场less 5 报错注入 sqli-labs靶场 每道题都从以下模板讲解,并且每个步骤都有图片,清晰明了,便于复盘。 sql注入的基本步骤 注入点注入类型 字符型:判断闭合方式 (‘、"、’、“”…...
AI基础02-图片数据采集
上篇文章我们学习了文本的数据采集,今天主要了解一下图片数据采集的方法。图片采集方法通常有网页采集和实时采集(传感器采集)两种。我们学习一下如何利用python 工具和笔记本计算机摄像头进行图片数据的实时采集。 1)cv2库简介 …...
QT音乐播放器(1):数据库保存歌曲
实现功能:用数据库保存本地导入和在线搜索的歌曲记录 目录 一. 保存本地添加的歌曲 1. 使用QSettings (1)在构造函数中,创建对象。 (2)在导入音乐槽函数中,保存新添加的文件路径,…...
Java面试黄金宝典22
1. 树的中序遍历,除了递归和栈还有什么实现方式 定义 Morris 遍历是一种用于二叉树遍历的算法,它利用树中大量空闲的空指针,在不使用额外栈空间和递归的情况下,完成树的遍历。通过建立临时的线索连接,使得可以按照中…...
英伟达GB300新宠:新型LPDDR5X SOCAMM内存
随着人工智能(AI)、机器学习(ML)和高性能计算(HPC)应用的快速发展,对于高效能、大容量且低延迟内存的需求日益增长。NVIDIA在其GB系列GPU中引入了不同的内存模块设计,以满足这些严格…...
验证Linux多进程时间片切换的程序
一、软件需求 在同时运行多个CPU密集型进程时,需采集以下统计信息: 当前运行在逻辑CPU上的进程ID每个进程的运行进度百分比 实验程序设计要求: 1. 命令行参数 参数说明示例值n并发进程数量3total总运行时长(毫秒&…...
Linux学习笔记(应用篇四)
基于I.MX6ULL-MINI开发板 输入设备tslib库 输入设备 触摸屏 触摸屏设备是绝对位移设备可以上报绝对位移事件 触摸可分为单触摸和双触摸 BTN_TOUCH :按压触摸屏和松开会触发上报,滑动时不会 单触摸上报事件 ABS_X: X 轴绝对位移坐标值 ABS_Y…...
linux基本命令(1)--linux下的打包命令 -- tar 和gzip
tar 解压 ,打包 语法:tar [主选项辅选项] 文件或者目录 使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。 主选项: c 创建新的档案文件。如果用户想备…...
【Linux内核系列】:文件ELF格式详解
🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: “人生没有白走的路,你踩过的荆棘、蹚过的泥泞,都会在某一刻,变成你脚下的风。” ★★★ 本文前置…...
CubeMx ——新建工程
新建工程 选择芯片 设置主频 选择调试口 选择晶振口 设置 GPIO 输出 工程设置 LED 闪烁 /* USER CODE BEGIN WHILE */while (1){HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_10);HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */...
使用postcss-px-to-viewport-8-plugin将页面转响应式
使用postcss-px-to-viewport-8-plugin将页面转响应式 背景 公司最近接了个项目,其中要求部分页面在移动端正常显示,第一方案是使用响应式,但是设计稿最后出的和Web端差别较大同时两端的功能不是完全对齐的,所以决定使用两个模块…...
Java---类与对象
类与对象 前言:一、面向对象二、类的定义1.类的定义格式2.访问修饰限定符 三、类的实例化四、this引用1.this引用2.this引用的原因 五、对象的构造和初始化1.初始化对象2.构造方法(1).构造方法的概念:(2).特性:(3).this调用:3.就地初始化4.默…...
告别桌面杂乱与充电焦虑,移速165W百变桌面充电站首发体验
告别桌面杂乱与充电焦虑,移速165W百变桌面充电站首发体验 哈喽小伙伴们好,我是Stark-C~ 先如今,家里的电子产品越来越多,手机、平板、电脑三件套已经是基础配置,还有相机、Switch、智能手表等,这些产品用…...
基于springboot+vue的农产品电商平台
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
dom0运行android_kernel: do_serror of panic----failed to stop secondary CPUs 0
问题描述: 从日志看出,dom0运行android_kernel,刚开始运行就会crash,引发panic 解决及其原因分析: 最终问题得到解决,发现是前期在调试汇编阶段代码时,增加了汇编打印的指令,注释掉这些指令,问题得到解决。…...
MySQL 语句
MySQL 语句教程博客 MySQL 是目前广泛应用的关系型数据库管理系统,本文将详细介绍 MySQL 中常用的 SQL 语句及其应用,内容主要涵盖以下部分: DDL(数据定义语言) DML(数据操作语言) DQL&#…...
MySQL General Log
MySQL General Log MySQL General Log General Log 的开启General Log 的用法log_output 参数 MySQL主从复制:https://blog.csdn.net/a18792721831/article/details/146117935 MySQL Binlog:https://blog.csdn.net/a18792721831/article/details/146606…...
自动关机监控器软件 - 您的电脑节能助手
## 自动关机监控器 - 您的电脑节能助手 自动关机监控器是一款基于Python开发的实用工具,旨在帮助用户节省电力资源并延长电脑使用寿命。该程序通过监控用户的鼠标和键盘活动,在设定的无活动时间后自动关闭计算机,特别适合需要长时间离开电脑但…...
基于改进粒子群算法的多目标分布式电源选址定容规划(附带Matlab代码)
通过分析分布式电源对配电网的影响,以有功功率损耗、电压质量及分布式电源总容量为优化目标,基于模糊理论建立了分布式电源在配电网中选址定容的多目标优化模型,并提出了一种改进粒子群算法进行求解。在算例仿真中,基于IEEE-14标准…...
解锁健康密码:拥抱多元养生新方式
在追求高质量生活的当下,健康养生不再是一句空洞的口号,而是融入到日常生活的方方面面。它不仅关乎我们的身体健康,更与心理状态和生活品质息息相关。下面,就为大家介绍一些实用的养生知识,帮助大家开启健康生活之旅。…...
@Slf4j注解
Slf4j注解是Lombok库提供的一个注解,用于简化日志记录器的创建。使用该注解后,无需手动创建Logger实例,编译器会自动帮你完成这一步。以下是使用Slf4j注解打印日志的步骤和示例: 使用步骤 1. 引入依赖:在项目中引入SL…...
firewall-cmd添加访问规则
若要使用 **firewall-cmd** 允许 192.168.3.0/24 网段访问本地的 8088 端口,你可以按照以下步骤操作。 临时允许访问 如果你仅需临时允许该网段访问 8088 端口,可使用如下命令: firewall-cmd --add-rich-rulerule family"ipv4" …...
【Linux网络与网络编程】02.初识Socket编程
1. 数据传输的目的 前一篇文章中我们讲解了网络传输的流程,那么网络传输的目的是什么呢?难道我们只是将数据从一台主机传输到另一台主机吗? 当然不是的!因为数据是给人用的。比如:聊天是人在聊天,下载是人…...
Python库()
1.概念 Matplotlib 库:是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组来绘制 2D 图像,它使用简单、代码清晰易懂 Matplotlib 图形组成: Figure:指整个图形…...