WebGIS开发入门到进阶 | 高德地图打卡功能实现教程
前面我们学习了监听地图的click事件实现了在地图上点击新增热门标记点的功能。那么这节前面我们学习了监听地图的click事件实现了在地图上点击新增热门标记点的功能。那么这节课我们利用上一节 GeoJSON 数据持久化来实现标记点的保存功能以实现打卡功能——能在标记点显示打卡次数标记点不会消失就算重启浏览器也能保存。那么怎么来实现打卡功能呢这就需要监听标记点的点击事件了。今天我们要实现的是监听标记点的点击事件语法与监听地图点击事件非常相似。一、监听标记点的点击事件现在就来实现下监听标记点的点击事件一样的语法marker.on(click, function(e) { // 点击标记时执行的代码 })当点击标记时就能启动 function 中的代码。这里的marker就是我们创建或已有的标记点对象。为了保存打卡次数需要对标记点进行属性赋值这时候就需要对 GeoJSON 进行修改。在创建标记时我们通过extData来添加自定义属性var marker new AMap.Marker({ // 创建标记 position: e.lnglat, extData: { _geoJsonProperties: { gid: geojson.getOverlays().length 1, click: 0, } } })这里设置了gid就是标记序号属性从 1 开始还有点击属性click用来记录点击次数初始值为 0。需要注意的是_geoJsonProperties是 GeoJSON 数据中用来存储自定义属性的标准字段名高德地图 SDK 在导入导出 GeoJSON 时会自动识别这个字段。二、为新标记点绑定点击事件创建 marker 后还要给 marker 创建绑定事件。注意这是写在map.on(click)事件中的。语法就是上面的写法map.on(click, function(e) { // 创建标记 var marker new AMap.Marker({ position: e.lnglat, extData: { _geoJsonProperties: { gid: geojson.getOverlays().length 1, click: 0, } } }) // 为新标记绑定点击事件 marker.on(click, function(e) { // 点击时执行的逻辑 }) })这样就只有对新创建的 marker 才绑定了点击事件。每次用户点击地图新增一个标记时这个新标记就拥有了点击打卡的功能。三、为旧标记点绑定点击事件但是对于已有的 marker 就没办法监听了。因为上面这种方式只对新创建的标记有效那些已经保存在本地、重启浏览器后重新加载出来的旧标记点还没有绑定点击事件。这时候还要对已有的 marker 绑定。已有的 marker 都是通过importData的方式拿到的。这时候就需要在导入的时候就对这些已有的数据进行绑定点击事件// 导入数据 if (JSON.stringify(getData()) ! []) { // 判断 localStorage 是否有数据 geojson.importData(getData()) // 导入数据 geojson.eachOverlay(function(item) { // 遍历所有标记 item.on(click, function(e) { // 为每个标记绑定点击事件 console.log(e) }) }) map.add(geojson) // 将 geojson 添加到地图 }函数里的item就是旧的数据的每一项这样就给每个 marker 都绑定点击事件了。这里eachOverlay是 GeoJSON 对象提供的一个遍历方法它会依次处理 geojson 中的每一个覆盖物即每一个标记点。四、实现打卡次数累加逻辑设置好事件后就需要实现当用户点击标记时点击属性加 1。这时候就在事件中实现var ext marker.getExtData() // 获取扩展数据 var click ext._geoJsonProperties.click // 点击次数加 1这个意思就是先获取 extData 属性值赋予 ext 变量然后从中提取click属性当点击时候就加 1然后赋值给 click 变量。同样的内容也得给旧标记点再来一次复制过去即可item.on(click, function(e) { var ext item.getExtData() var click ext._geoJsonProperties.click }这就实现了新旧点在点击时都能让click属性加 1。注意如果调试时需要先把已有的 geojson 存储删除因为这里已经改变了 geojson 的结构已有的数据是没有这些属性的。可以在浏览器控制台执行localStorage.removeItem(geoData)来清除旧数据。五、数据持久化保存实现上述步骤后还有个问题就是click的值并没有实现在本地存储 geojson 数组中的保存。也就是说虽然点击时内存中的click值增加了但如果刷新页面打卡次数会丢失。所以还得加上一句saveData(geojson.toGeoJSON())这样才能实现在 localStorage 中的保存。geojson.toGeoJSON()方法会将当前所有标记点及其属性数据导出为标准 GeoJSON 格式然后通过saveData函数存储到浏览器本地。同样的这个操作也需要在新旧标记都要进行一遍新标记的点击事件marker.on(click, function(e) { var ext marker.getExtData() var click ext._geoJsonProperties.click saveData(geojson.toGeoJSON()) // 保存到本地 })旧标记的点击事件item.on(click, function(e) { var ext item.getExtData() var click ext._geoJsonProperties.click saveData(geojson.toGeoJSON()) // 保存到本地 })六、使用信息窗口显示打卡次数这样就实现了打卡功能但是打卡次数现在是在控制台输出的如何让用户看见呢这样就需要使用信息框了。思路就是把console.log替换成消息框的显示模式// 使用消息提示框 var infowindow new AMap.InfoWindow({ anchor: top-center, // 信息窗口锚点位置 content: div打卡了${click}次/div // 模板字符串显示打卡次数 })这里使用了 ES6 的模板字符串语法将click变量的值动态嵌入到 HTML 内容中。anchor: top-center表示信息窗口的锚点位于顶部中间位置。这样来实现消息的显示注意这个也是在map.on里实现的。接下来就是显示// 打开信息窗 infowindow.open(map, marker.getPosition())就是实现了消息窗在哪里显示。marker.getPosition()获取标记点的经纬度坐标信息窗口就会在这个位置弹出。当然新旧标记都要来实现一遍新标记的完整点击事件marker.on(click, function(e) { var ext marker.getExtData() var click ext._geoJsonProperties.click saveData(geojson.toGeoJSON()) var infowindow new AMap.InfoWindow({ anchor: top-center, content: div打卡了${click}次/div }) infowindow.open(map, marker.getPosition()) })旧标记的完整点击事件item.on(click, function(e) { var ext item.getExtData() var click ext._geoJsonProperties.click saveData(geojson.toGeoJSON()) var infowindow new AMap.InfoWindow({ anchor: top-center, content: div打卡了${click}次/div }) infowindow.open(map, item.getPosition()) })七、常见问题解答7.1 为什么点击标记时候不会触发地图的 click 事件这是一个容易被忽略的问题。在高德地图中点击标记点时事件被标记捕获并处理不会冒泡到地图层。因此map.on(click)事件不会被触发。这正是为什么我们需要单独为标记点绑定click事件来处理打卡逻辑。7.2 调试时需要注意什么如果调试时发现旧标记点点击没有反应或者打卡次数不显示可能是因为之前存储的 GeoJSON 数据中没有_geoJsonProperties这个属性结构。建议在调试前先清除已有的本地存储数据然后在控制台执行location.reload()刷新页面重新添加标记点进行测试。八、总结通过本节课的学习我们实现了以下功能✅ 通过marker.on(click)监听标记点的点击事件✅ 使用extData._geoJsonProperties为标记点添加click属性记录打卡次数✅ 通过geojson.eachOverlay()遍历旧标记点并绑定点击事件✅ 使用geojson.toGeoJSON()和saveData()实现数据的持久化保存✅ 使用AMap.InfoWindow在标记点位置显示打卡次数信息至此一个完整的打卡功能就实现了。用户添加的每个标记点都支持打卡记录次数会累加显示并且所有数据在浏览器重启后依然存在。大家可以先自己上手尝试看看。如果有不明白或者看不懂的地方戳我WebGIS开发零基础入门系列教程持续更新中关注我们不错过后面的内容更新

相关新闻

2026年揭秘!余姚专业靠谱、备受称赞的雾化香水喷头公司究竟哪家强?

2026年揭秘!余姚专业靠谱、备受称赞的雾化香水喷头公司究竟哪家强?

在化妆品包材领域,雾化香水喷头作为关键组件,其质量、性能和供应服务至关重要。对于化妆品包材采购商而言,找到一家专业靠谱的供应商并非易事。在余姚,众多的供应商让人眼花缭乱,而宁波微旺塑业有限公司凭借着多方面的…

2026/7/30 9:09:43 阅读更多 →
Matlab路径规划:10分钟从零创建栅格地图(附完整代码)

Matlab路径规划:10分钟从零创建栅格地图(附完整代码)

1. 项目概述:为什么从栅格地图开始?如果你刚接触路径规划,无论是做机器人导航、游戏AI寻路,还是自动驾驶的仿真测试,第一个拦路虎往往不是复杂的A*或Dijkstra算法,而是“地图”。没有一张清晰、可计算的地图…

2026/7/30 9:09:43 阅读更多 →
2026国内企业级AI编程平台都有哪些:15款主流企业AI代码开发工具对比

2026国内企业级AI编程平台都有哪些:15款主流企业AI代码开发工具对比

一、行业整体发展趋势与权威报告依据 2026 年被行业普遍定义为 AI 编程智能体开发平台规模化落地元年,AI 编程平台正式告别单点代码补全工具形态,迈入智能体自主驱动软件全生命周期开发阶段。结合 Gartner《2026 Enterprise AI Coding Agents 魔力象限报…

2026/7/30 9:09:43 阅读更多 →

最新新闻

AI 总是胡说八道?一文讲透 RAG,让大模型告别“瞎编“

AI 总是胡说八道?一文讲透 RAG,让大模型告别“瞎编“

AI 总是胡说八道?一文讲透 RAG,让大模型告别"瞎编"你问 ChatGPT 公司报销流程,它给你编了一套不存在的制度 你问它最新政策,它说"我的知识截止到 2024 年" 你让它基于内部文档写报告,它根本不知道…

2026/7/30 9:16:45 阅读更多 →
Logistic回归:从原理推导到手写实现与Scikit-learn实战

Logistic回归:从原理推导到手写实现与Scikit-learn实战

1. 项目概述:从“分类”这个根本问题说起在机器学习的浩瀚海洋里,我们最先学会游泳的地方,往往是预测一个连续的值,比如房价、销量,这被称为回归。但现实世界充满了选择与判断:这封邮件是不是垃圾邮件&…

2026/7/30 9:16:45 阅读更多 →
WeChatPad终极指南:一键解锁微信平板模式,实现真正的双设备同步登录

WeChatPad终极指南:一键解锁微信平板模式,实现真正的双设备同步登录

WeChatPad终极指南:一键解锁微信平板模式,实现真正的双设备同步登录 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 还在为微信无法同时在手机和平板上登录而烦恼吗?WeChat…

2026/7/30 9:15:45 阅读更多 →
WLCSP晶圆级芯片封装技术:原理、挑战与选型实战指南

WLCSP晶圆级芯片封装技术:原理、挑战与选型实战指南

1. 项目概述:为什么WLCSP是当下芯片封装的“显学”?最近几年,但凡和芯片沾点边的工程师,无论是做设计的、搞工艺的,还是跑市场的,都绕不开一个词:WLCSP。它全称是Wafer Level Chip Scale Packag…

2026/7/30 9:15:45 阅读更多 →
Linux USB PHY驱动深度解析:从物理层原理到内核框架实战

Linux USB PHY驱动深度解析:从物理层原理到内核框架实战

1. 项目概述:为什么从USB PHY开始聊驱动搞Linux驱动开发,尤其是USB这块,很多朋友一上来就扎进usbcore、hub.c或者各种Gadget、Host Controller驱动里,对着复杂的协议状态机和海量的结构体发懵。我刚开始也是这么过来的&#xff0c…

2026/7/30 9:15:45 阅读更多 →
主流固定资产管理系统深度解析:企业如何精准选型?

主流固定资产管理系统深度解析:企业如何精准选型?

在企业运营过程中,固定资产管理是保障生产经营有序开展的重要环节。传统人工管理模式易出现账实不符、盘点效率低、资产闲置等问题,而数字化的固定资产管理系统能有效解决这些痛点。市面上系统类型丰富,企业可根据自身需求选择适配方案&#…

2026/7/30 9:15:45 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻