MapLibre GL JS第62课:创建可拖动标记

maplibre-gl-js-docs:MapLibre GL JS 文档网站 MapLibre GL JS 文档 的源代码,该网站托管和。 GitHub 操作工作流在推送到main分支时触发。 此 Action 构建静态网站并通过推送到gh-pages分支将其部署到 GitHub Pages。 迁移说明 我们现在正在将此文档从 Mapbox 迁移到 MapLibre。 如果您想贡献,请随时在 GitHub 上打开或提交以直接提出您的更改。 要求 节点 12 6 如果您不确定您的 Node 和 NPM 版本是否是最新的, nvm use在安装依赖项之前运行nvm use 。 如果您没有安装 NVM,您可以。 NPM 脚本不会在 Windows 上运行,但可以与完美配合。 设置开发环境 克隆此存储库后,运行: npm ci # install dependencies with npm git submodule update --init # initiali 立即下载

📌 学习目标

  • 掌握创建可拖动标记的实现方法
  • 理解相关API的使用
  • 能够独立完成类似功能开发

MapLibre GL JS 从入门到精通 - 130+实战案例

🎯 核心概念

创建可拖动的标记。

💻 完 整 代 码

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Create a draggable Marker</title>
    <meta property="og:description" content="将标记拖动到地图上的新位置并在显示中填充其坐标。" />
    <meta property="og:created" content="2006-06-25" />
    <meta charset='utf-8'>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel='stylesheet' href='https://unpkg.com/maplibre-gl@5.24.0/dist/maplibre-gl.css' />
    <script src='https://unpkg.com/maplibre-gl@5.24.0/dist/maplibre-gl.js'></script>
    <style>
        body { margin: 0; padding: 0; }
        html, body, #map { height: 100%; }
    </style>
</head>
<body>
<style>
    .coordinates {
        background: rgba(0, 0, 0, 0.5);
        color: #fff;
        position: absolute;
        bottom: 40px;
        left: 10px;
        padding: 5px 10px;
        margin: 0;
        font-size: 11px;
        line-height: 18px;
        border-radius: 3px;
        display: none;
    }
</style>

<div id="map"></div>
<pre id="coordinates" class="coordinates"></pre>

<script>
    const coordinates = document.getElementById('coordinates');
    const map = new maplibregl.Map({
        container: 'map',
        style: 'https://demotiles.maplibre.org/style.json',
        center: [0, 0],
        zoom: 2
    });

    const marker = new maplibregl.Marker({draggable: true})
        .setLngLat([0, 0])
        .addTo(map);

    function onDragEnd() {
        const lngLat = marker.getLngLat();
        coordinates.style.display = 'block';
        coordinates.innerHTML =
            `Longitude: ${lngLat.lng}<br />Latitude: ${lngLat.lat}`;
    }

    marker.on('dragend', onDragEnd);
</script>
</body>
</html>

🔍 代码解析

1. 初始化地图

使用 new maplibregl.Map() 创建地图实例,配置了以赤道为中心的全球视图。

2. 关键配置项

  • draggable: true: 启用标记的拖动功能
  • getLngLat(): 获取标记当前位置坐标
  • dragend事件: 监听拖动结束事件
  • 实时坐标显示: 在拖动结束后更新坐标显示

⚙️ 参数说明

参数类型必填说明
draggableboolean否是否可拖动,默认false
lngLat[number, number]是初始位置 [经度, 纬度]
marker.getLngLat()method-获取当前坐标
dragendevent-拖动结束时触发

🎨 效果说明

在这里插入图片描述

运行代码后,地图显示全球视图,在地图中心(0, 0位置)显示一个可拖动的标记。用户可以:

  • 点击并拖动标记到任意位置
  • 拖动过程中标记跟随鼠标移动
  • 释放鼠标后,底部显示标记当前的经纬度坐标

💡 常 见 问 题

Q1: 标记不能拖动?
A: 检查以下几点:

  1. 确认创建Marker时设置了 draggable: true
  2. 确认标记已添加到地图(addTo(map))
  3. 检查是否有其他元素阻止了鼠标事件

Q2: 如何获取拖动过程中的实时坐标?
A: 监听drag事件获取实时坐标:

marker.on('drag', () => {
    const lngLat = marker.getLngLat();
    coordinates.innerHTML = `Longitude: ${lngLat.lng.toFixed(4)}<br />Latitude: ${lngLat.lat.toFixed(4)}`;
});

Q3: 如何限制拖动范围?
A: 在dragend事件中检查并纠正位置:

marker.on('dragend', () => {
    const lngLat = marker.getLngLat();
    // 限制在[-180, 180]经度范围
    const clampedLng = Math.max(-180, Math.min(180, lngLat.lng));
    const clampedLat = Math.max(-90, Math.min(90, lngLat.lat));
    marker.setLngLat([clampedLng, clampedLat]);
});

📝 练习任务

  1. 基础练习:修改坐标显示的样式和位置
  2. 进阶挑战:添加拖动过程中的实时坐标显示
  3. 拓展思考:如何实现拖动范围限制?
  4. 综合实践:创建一个地址选择器,支持拖动标记选择位置

🌟 最佳实践

  1. 用户体验: 提供清晰的视觉反馈,区分拖动状态
  2. 性能优化: 对于实时坐标更新,使用requestAnimationFrame优化
  3. 边界处理: 考虑坐标范围限制(经度-180180,纬度-9090)
  4. 状态管理: 保持坐标显示与标记位置同步
  5. 可访问性: 提供键盘操作支持,允许通过键盘移动标记

🔗 延伸阅读


本文是MapLibre GL JS实践课程系列的一部分,欢迎关注收藏

【AI方案集】AI与人机协作相结合的智能法律咨询系统.docx AI技术方案以算力、算法、数据三角协同为核心,通过搭建标准化的数据预处理、模型训练与边缘云端协同部署流程,将计算机视觉、自然语言处理、机器学习等核心能力深度融入业务场景,既实现自动化流程降本提效,又通过精准的模式识别与预测分析为管理层提供数据驱动的决策支撑,最终完成从通用AI技术到行业定制化场景的适配落地,为企业数字化转型提供可落地的技术路径。 立即下载

相关推荐

picture again

picture again

MapLibre的使用

MapLibre 1.初始化地图 引入maplibre-gl.js 创建一个地图容器 实例化地图 <body> <div id="map"></div> <script> //初始化地图实例 var map = new maplibregl.Map({ container: 'map', //容器的id style: './static/map.json', //地图描述数据的路径 center: [0, 0]

weixin_45727272的博客 8871

计算机二级通关宝典1计算机二级通关宝典

计算机二级通关宝典1计算机二级通关宝典

Global Mapper SDK 19 中文开发文档(八)

Global Mapper的SDK(软件开发工具包)提供了一组功能强大的工具和接口,用于扩展和定制Global Mapper软件。

八两的博客 1406

MobaXterm终端工具个人学习版安装包及常用配置备份

资源包含 MobaXterm 个人版的安装包以及日常运维常用的基础配置备份文件。适用于网络工程师及运维人员用于日常的服务器管理、SSH 连接及串口调试。 压缩包内附带了个人整理的软件使用技巧与配置说明(仅供个人学习参考)。请各位同行下载后注意,技术工具请尽量支持官方正版,本资源仅供个人测试与交流使用,切勿用于商业环境。

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

maplibre

maplibre学习 api官网:https://maplibre.org/maplibre-gl-js-docs/api/map/#map#getsource 文档:https://maplibre.org/maplibre-gl-js-docs/style-spec/sources/ 实时画图:https://geojson.io/#map=6/38.831/39.331 GeoJson规范https://www.oschina.net/translate/geojson-spec?cmp&p=

weixin_57011137的博客 1296

科技中介服务机构如何借助平台提升技术撮合服务的专业性与响应速度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

ycmd支持的语言与客户端全解析:从Vim到Emacs的无缝集成

ycmd是一款功能强大的代码补全引擎,为开发者提供高效、智能的代码补全体验。它支持多种主流编程语言和编辑器客户端,实现了从Vim到Emacs的无缝集成,极大提升了开发效率。 ## 🚀 全面的语言支持能力 ycmd支持众多编程语言,满足不同开发场景的需求。通过其模块化的架构,能够为各种语言提供精准的代码补全、语法检查和跳转功能。 ### 主流编程语言全覆盖 ycmd对多种编程语言提供原生支

gitblog_00359的博客 783

产业园区如何利用AI技术提升科技成果转化服务的响应速度与转化成功率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

11232131231231是的

11232131231231是的

MapLibre GL JS 从入门到精通 - 130+实战案例

本课程提供MapLibre GL JS的130+实战案例,系统讲解地图开发核心技术。内容涵盖基础地图显示、数据图层处理、样式可视化、交互动画、3D地形等高级功能,以及绘图工具、性能优化等应用。适合前端开发者、GIS工程师等学习,帮助掌握WebGL地图渲染原理,开发各类地图应用。课程包含大量可复用代码示例,从入门到进阶全面覆盖地图开发需求。

专注GIS软件开发。 660

基于双向Buck-Boost电路的锂电池储能充电+放电控制Simulink仿真

内容概要:本文档详细介绍了一种基于双向Buck-Boost电路的锂电池储能系统充放电控制的Simulink仿真模型,重点实现了充电与放电过程中双向能量流动的精确控制。通过Simulink平台构建完整的电路拓扑与控制系统,采用电压、电流双闭环控制策略,有效提升了系统的稳定性与能量转换效率。文档不仅提供了详细的仿真建模方法,还结合参考文献增强了理论支撑,具有较高的科研与工程应用价值。此外,文中列举了大量电力电子领域的相关仿真资源,涵盖LLC谐振变换器、PFC电路、PWM整流器、状态估计等多种技术方向,形成了一个综合性强、覆盖面广的技术资料库,便于研究人员拓展学习和复用设计。; 适合人群:电气工程、自动化、新能源等相关专业的研究生、科研人员及从事电力电子系统设计的工程师。; 使用场景及目标:①研究锂电池储能系统的双向能量管理与高效充放电控制策略;②掌握基于Simulink的电力电子系统建模与闭环控制器设计方法;③为科研项目、毕业设计或工程开发提供可复现的仿真案例与技术支持。; 阅读建议:建议结合文档中提供的参考文献与外部资源链接,系统性地学习Buck-Boost电路的工作原理与控制理论,优先理解基础拓扑运行机制后再深入双闭环控制策略的设计与参数整定,同时可参照同系列其他仿真案例进行对比分析与拓展实践。

MapLibre GL JS 入门指南:构建现代化Web地图应用

MapLibre GL JS 是一个基于WebGL技术的开源JavaScript库,专门用于在浏览器中渲染交互式矢量地图。作为MapLibre生态系统的重要组成部分,它能够高效解析和渲染矢量切片数据,为开发者提供高度定制化的地图呈现方案。 ## 核心特性解析 - **WebGL加速渲染**:利用现代GPU硬件加速,实现流畅的地图渲染性能 - **矢量切片支持**:采用先进的矢量切片技术,相比传...

gitblog_00100的博客 1441

【Trans论文复现】基于Agent的电力市场深度决策梯度(深度强化学习)算法建模研究(Python代码实现)

内容概要:本文详细介绍了“Plecs全桥LLC谐振变换器仿真模型”这一技术资源,聚焦于利用PLECS仿真工具对隔离型全桥LLC谐振变换器进行建模、参数设计与性能分析。该资源系统阐述了LLC谐振变换器的工作原理,涵盖谐振参数设计、软开关实现机制、效率优化等关键技术环节,并配套提供了完整的仿真模型、设计报告与计算书,便于用户深入理解其在高效率、软开关功率转换中的优势与应用。研究内容不仅支持理论学习,还可用于控制策略的验证与优化设计,具有较强的工程实践价值。; 适合人群:具备电力电子技术基础知识,从事开关电源、高频功率变换器研发及相关领域研究的工程技术人员与高校研究生。; 使用场景及目标:①用于全桥LLC谐振变换器的教学演示与原理学习;②支持科研人员开展高效DC-DC变换器的建模、仿真与优化设计;③为掌握PLECS在电力电子系统仿真中的高级应用提供详实案例。; 阅读建议:建议结合PLECS仿真软件进行实际操作,通过运行仿真模型并对照设计文档,深入理解电路各模块功能、参数设置依据及软开关实现条件,重点关注谐振腔参数对系统效率与动态响应的影响,以全面提升对LLC变换器工作特性的认知水平与工程设计能力。

三电平维也纳VIENNA双闭环控制整流器仿真(Simulink仿真实现)

内容概要:本文档系统介绍了“三电平维也纳VIENNA双闭环控制整流器”的Simulink仿真资源,重点涵盖电压电流双闭环控制、中点电位平衡控制及SVPWM调制等核心技术,服务于高精度电力电子系统的建模与优化。资源包不仅包含三相维也纳整流器、双有源桥DAB变换器、LLC谐振变换器等多种典型拓扑的仿真模型,还整合了Mathcad计算书、参考文献、MATLAB代码及设计报告等配套材料,突出科研复现与工程设计双重价值。特别针对控制策略优化、软开关技术实现、最小应力控制等前沿方向提供顶级EI期刊级别的复现案例,强化理论深度与实践指导意义。; 适合人群:面向具备电力电子、自动控制或电气工程等相关专业背景的研究生、科研人员及从事新能源、电力变换系统开发的工程技术人员,尤其适合正在进行高性能整流器与DC-DC变换器研究的专业人士。; 使用场景及目标:①支持高校与科研机构在三电平整流器、功率因数校正(PFC)、DC-DC变换器等领域开展控制系统建模与算法验证;②助力高质量学术论文复现(如EI/SCI期刊)、硕士/博士课题研究、毕业设计及企业级项目开发;③深入掌握SVPWM调制、双闭环动态调节、中点电位平衡控制等关键电力电子控制技术的实现机制与参数整定方法。; 阅读建议:建议结合提供的完整资源目录循序渐进地学习,优先研读控制框图与数学建模部分,理解控制逻辑与参数设计原理后,再通过Simulink平台进行仿真实验与参数调试,注重理论推导与仿真结果的对比分析,全面提升科研创新能力与工程实践能力。

储能双向Buck-Boost+模型预测电流控制+电压下垂控制仿真【附参考文献】(Simulink仿真实现)

内容概要:本文详细介绍了基于Simulink平台构建的储能双向Buck-Boost变换器仿真模型,重点实现了模型预测电流控制(MPC)与电压下垂控制相结合的先进控制策略。该系统通过精确预测电感电流与动态调节母线电压,有效提升了储能系统在充放电切换过程中的动态响应速度、运行稳定性与抗扰动能力。模型充分考虑了实际应用场景中的非理想因素,结合参考文献进行了算法优化与参数设计,增强了方案的技术可行性与工程实用价值,适用于微电网、分布式能源系统及多储能单元并联运行的能量协调管理。; 适合人群:电气工程、自动化、新能源技术及相关领域的科研人员、研究生以及从事电力电子变换器与智能电网控制系统研发的工程师。; 使用场景及目标:①深入研究双向DC-DC变换器在储能系统中的高性能控制方法;②掌握模型预测控制与下垂控制的协同设计原理及其在复杂工况下的动态调节机制;③为微电网能量管理、多源协同控制、电压频率支撑等关键技术提供可靠的仿真验证平台。; 阅读建议:建议结合提供的Simulink模型与参考文献进行系统学习,重点关注控制器结构设计、预测模型建立及控制参数整定过程,可通过调整负载突变、设定不同工作模式等方式开展仿真实验,深入理解控制策略的鲁棒性与适应性表现。

jp-host-release.apk

jp-host-release.apk

上一篇: PostGIS 裁剪提速技巧:分清空间谓词与叠加运算,少跑一半 ST_Intersection
下一篇: MapLibre GL JS第63课:动画化标记
丷丩
丷丩 优质创作者: 数据科学与机器学习技术领域 优质创作者: 数据科学与机器学习技术领域
博客等级 码龄18年 1万+粉丝 317原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丷丩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值