新闻中心
使用 localStorage 持久化地图标记数据

本文介绍了如何使用 J*aScript 和 MapLibre GL JS (通过 maptilersdk) 在地图上创建可拖拽的标记,并利用浏览器的 localStorage API 来持久化这些标记的位置数据,以便在页面重新加载后仍能显示这些标记。
存储和加载地图标记
在 Web 应用程序中,动态创建并管理地图上的标记是很常见的需求。然而,默认情况下,这些标记数据在页面刷新后会丢失。为了解决这个问题,我们可以使用浏览器的 localStorage API 将标记的位置数据存储在本地,并在页面加载时重新加载这些数据。
使用 localStorage
localStorage 是一种 Web API,允许我们在用户的浏览器中存储键值对数据。这些数据在浏览器关闭后仍然存在,直到被显式删除或浏览器清除缓存。
存储标记数据:
收集标记数据: 首先,我们需要收集所有标记的位置数据。可以将这些数据存储在一个数组中,每个元素代表一个标记的经纬度坐标。
序列化数据: localStorage 只能存储字符串类型的数据。因此,我们需要将标记数据数组序列化为 JSON 字符串。可以使用 JSON.stringify() 方法来实现。
存储到 localStorage: 使用 localStorage.setItem(key, value) 方法将序列化后的数据存储到 localStorage 中。key 是一个字符串,用于标识存储的数据,value 是要存储的 JSON 字符串。
示例代码:
function s*eMarkersToLocalStorage(markers) {
const markerData = markers.map(marker => {
return marker.getLngLat();
});
const markerDataString = JSON.stringify(markerData);
localStorage.setItem("mapMarkers", markerDataString);
}加载标记数据:
从 localStorage 获取数据: 使用 localStorage.getItem(key) 方法从 localStorage 中获取存储的 JSON 字符串。
网趣网上购物系统HTML静态版
网趣购物系统静态版支持网站一键静态生成,采用动态进度条模式生成静态,生成过程更加清晰明确,商品管理上增加淘宝数据包导入功能,与淘宝数据同步更新!采用领先的AJAX+XML相融技术,速度更快更高效!系统进行了大量的实用性更新,如优化核心算法、增加商品图片批量上传、谷歌地图浏览插入等,静态版独特的生成算法技术使静态生成过程可随意掌控,从而可以大大减轻服务器的负担,结合多种强大的SEO优化方式于一体,使
0
查看详情
反序列化数据: 使用 JSON.parse() 方法将 JSON 字符串反序列化为 J*aScript 对象(在本例中是一个数组)。
创建并添加标记: 遍历反序列化后的数组,为每个经纬度坐标创建一个新的标记,并将其添加到地图上。
示例代码:
function loadMarkersFromLocalStorage(map) {
const markerDataString = localStorage.getItem("mapMarkers");
if (markerDataString) {
const markerData = JSON.parse(markerDataString);
markerData.forEach(coords => {
const marker = new maptilersdk.Marker({
color: '#000',
draggable: true,
})
.setLngLat([coords.lng, coords.lat])
.addTo(map);
});
}
}将代码集成到 MapLibre GL JS 应用程序中
将上述代码集成到你的 MapLibre GL JS 应用程序中,你需要:
在地图初始化后,调用 loadMarkersFromLocalStorage(map) 函数来加载之前存储的标记。
在创建新的标记时,或者在标记被拖动后,更新 localStorage 中的数据。可以创建一个全局的标记数组,每次修改标记时都更新这个数组,并调用 s*eMarkersToLocalStorage(markers) 函数。
完整示例代码 (包含 maptilersdk):
maptilersdk.config.apiKey = 'YOUR_MAPTILER_API_KEY'; // 替换为你的 API 密钥
const map = new maptilersdk.Map({
container: 'map',
style: maptilersdk.MapStyle.STREETS,
center: [30.5, 50.5],
zoom: 14,
});
let markers = []; // 用于存储所有标记的数组
// 加载 localStorage 中的标记
function loadMarkersFromLocalStorage(map) {
const markerDataString = localStorage.getItem("mapMarkers");
if (markerDataString) {
const markerData = JSON.parse(markerDataString);
markerData.forEach(coords => {
const marker = new maptilersdk.Marker({
color: '#000',
draggable: true,
})
.setLngLat([coords.lng, coords.lat])
.addTo(map);
markers.push(marker); // 将新标记添加到 markers 数组
});
}
}
// 保存标记到 localStorage
function s*eMarkersToLocalStorage() {
const markerData = markers.map(marker => {
return marker.getLngLat();
});
const markerDataString = JSON.stringify(markerData);
localStorage.setItem("mapMarkers", markerDataString);
}
map.on('load', () => {
loadMarkersFromLocalStorage(map); // 在地图加载后加载标记
map.on('click', function (e) {
const marker = new maptilersdk.Marker({
color: '#000',
draggable: true,
})
.setLngLat([e.lngLat.lng, e.lngLat.lat])
.addTo(map);
markers.push(marker); // 将新标记添加到 markers 数组
s*eMarkersToLocalStorage(); // 保存标记到 localStorage
marker.on('dragend', () => {
s*eMarkersToLocalStorage(); // 拖动结束后保存标记
});
});
});注意事项:
- 确保替换 YOUR_MAPTILER_API_KEY 为你自己的 MapTiler API 密钥。
- 需要在 map.on('load', ...) 事件中加载 localStorage 中的标记,确保地图已经初始化完毕。
- 为了简化代码,示例中没有包含错误处理。在实际应用中,应该添加适当的错误处理机制,例如检查 localStorage 是否可用,以及 JSON.parse() 是否成功。
- localStorage 有存储容量限制(通常为 5MB 或 10MB)。如果需要存储大量数据,可以考虑使用 IndexedDB 或服务器端存储。
- 每次修改标记(创建、删除、拖动)后,都需要调用 s*eMarkersToLocalStorage() 来更新 localStorage 中的数据。
总结
通过使用 localStorage API,我们可以轻松地在 MapLibre GL JS 应用程序中持久化地图标记数据。这使得用户在刷新页面后仍然可以访问他们之前创建的标记,从而提供更好的用户体验。虽然 localStorage 有一些限制,但在许多情况下,它是一个简单有效的解决方案。对于更复杂的需求,可以考虑使用其他存储方案。
以上就是使用 localStorage 持久化地图标记数据的详细内容,更多请关注其它相关文章!
# 键值
# 保定seo新站优化
# 乌兰察布网站优化哪家好
# 众云佳SEO优化公司
# seo应该从哪些方向做
# 网站怎么推广可靠易速达
# 无码 云点播 seo oe
# 北京网站网络推广选择
# 怎么用网络推广营销产品
# 成都专业seo公司
# 长春建设个人网站
# 数据存储
# 网上
# 图上
# javascript
# 序列化
# 是一个
# 拖动
# 应用程序
# 购物系统
# 加载
# 键值对
# ai
# 浏览器
# json
# js
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】
拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达
C#中解析不规范的HTML为XML 常见的坑与解决办法
J*aScript map 方法中处理循环元素为空数组的策略
在React函数组件中利用原生HTML5进行邮箱地址验证
J*aScript数据结构转换:将对象数组按类别分组
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题
电脑IP地址怎么查 查看本机IP地址的几种方法
快手极速版在线观看 官方网页版登录地址
拼多多赚钱渠道_拼多多收益来源
Angular中父组件异步更新子组件复选框状态的实践指南
从OpenAI API响应中高效提取生成文本
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
处理动态列数据:J*a ArrayList的正确初始化与字符累加教程
格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施
Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧
新手怎么开始学化妆 零基础化妆入门教程
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
zookeeper 都有哪些功能?
漫蛙漫画登录站点 漫蛙2正版漫画快速访问
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】
高德地图怎么看全景照片_高德地图全景照片浏览教程
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误
QQ邮箱正确登录入口_QQ邮箱官方网站使用地址
mc.js免安装版 mc.js一键畅玩入口
处理嵌套交互式控件:前端可访问性指南
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
c++中的std::launder有什么实际用途_c++对象生命周期与指针优化
可靠CSGO开箱平台解析 CSGO开箱网合集
AO3最新官网入口公告_2025AO3镜像站实时查询方法
包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接
Pyrogram与g4f集成:异步编程实践与常见错误解决
天眼查企业查询官网入口 天眼查官方网页版查询
狙击外星人小游戏开始_狙击外星人小游戏立即开始
b站赚钱渠道_b站收益来源
解决 MongoDB 聚合查询中对象数组 _id 匹配问题
vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧
Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问
我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口
如何更改在 Excel 中打开超链接时的默认浏览器
Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略
Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】
抖音从哪里进入网页版_抖音官方入口链接
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法
Pandas DataFrame 多条件优先级排序与排名
Typer应用中灵活处理命令行参数的令牌化与解析
圆通快递查询实时追踪 圆通物流包裹状态快速查看


2025-10-26
浏览次数:次
返回列表
.addTo(map);
markers.push(marker); // 将新标记添加到 markers 数组
s*eMarkersToLocalStorage(); // 保存标记到 localStorage
marker.on('dragend', () => {
s*eMarkersToLocalStorage(); // 拖动结束后保存标记
});
});
});