当前位置: 首页 > news >正文

OpenLayers+html5 Overlay 示例

OpenLayers+html5 Overlay 示例

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>OpenLayers Overlay 示例</title> <!-- 引入 OL 样式 --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@7.4.0/ol.css"> <style> body { margin: 0; padding: 0; } #map { width: 100%; height: 100vh; } /* 弹窗样式 */ .ol-popup { position: absolute; background-color: white; box-shadow: 0 1px 4px rgba(0,0,0,0.2); padding: 15px; border-radius: 10px; border: 1px solid #cccccc; bottom: 12px; left: -50px; min-width: 200px; display: none; /* 默认隐藏 */ } .ol-popup:after, .ol-popup:before { top: 100%; border: solid transparent; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; } .ol-popup:after { border-top-color: white; border-width: 10px; left: 48px; margin-left: -10px; } .ol-popup:before { border-top-color: #cccccc; border-width: 11px; left: 48px; margin-left: -11px; } .closer { text-decoration: none; position: absolute; top: 2px; right: 8px; color: #999; } </style> </head> <body> <div id="map"></div> <!-- 弹窗 DOM 结构 --> <div id="popup" class="ol-popup"> <a href="#" id="popup-closer" class="closer">×</a> <div id="popup-content"></div> </div> <!-- 引入 OL JS --> <script src="https://cdn.jsdelivr.net/npm/ol@7.4.0/dist/ol.js"></script> <script> // 1. 获取 DOM 元素 const container = document.getElementById('popup'); const content = document.getElementById('popup-content'); const closer = document.getElementById('popup-closer'); // 2. 创建 Overlay 实例 const overlay = new ol.Overlay({ element: container, autoPan: true, // 弹窗超出视野时自动平移地图 positioning: 'bottom-center', stopEvent: true, // 【关键】阻止点击弹窗时事件穿透到地图 offset: [0, 0] }); // 3. 初始化地图 const map = new ol.Map({ target: 'map', layers: [ ], overlays: [overlay], // 将 Overlay 加入地图 view: new ol.View({ center: ol.proj.fromLonLat([112.9, 28.2]), // 长沙附近 zoom: 10 }) }); // 4. 加载高德底图 const gaodeLayer = new ol.layer.Tile({ source: new ol.source.XYZ({ title:"高德", url:"http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}" }) }) map.addLayer(gaodeLayer) // 5. 点击关闭弹窗 closer.onclick = function() { overlay.setPosition(undefined); closer.blur(); return false; }; // 6. 监听地图单击事件 map.on('singleclick', function(evt) { // 设置弹窗内容 const coordinate = evt.coordinate; const hdms = ol.coordinate.toStringHDMS(ol.proj.toLonLat(coordinate)); content.innerHTML = '<p>你点击了这里:</p><code>' + hdms + '</code>'; // 设置弹窗位置并显示 overlay.setPosition(coordinate); container.style.display = 'block'; // 确保显示 }); </script> </body> </html>

http://www.jsqmd.com/news/1106909/

相关文章:

  • 一张图讲清楚:上下文窗口大了,为什么 Agent 还是会忘事
  • Triton+KServe构建高可靠AI模型服务架构
  • 易连EDI—EasyLink获得统信UOS适配认证:以自主之力,筑牢信创数据交换底座
  • 蒸汽流量计选型指南
  • Java计算机毕设之基于 SpringBoot 的办公会议室智能申请系统的设计与实现 基于 SpringBoot 的会议场地资源分配管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 【Springboot毕设全套源码+文档】springboot基于物联网技术的宠物定位与监控系统设计小程序(丰富项目+远程调试+讲解+定制)
  • Triton模型服务化:生产级AI推理的稳定性与可观测性实践
  • 【限时开源】IDEA红色感叹号智能诊断插件v1.2(已拦截23,841次无效Sync),附赠企业级项目迁移Checklist PDF
  • 长沙短视频剪辑拍摄哪家性价比高
  • AI合规高阶:生成式AI的合规要求与实践案例
  • tomcat为什么假死了.md
  • 2026 企业网络高质量博文(升级版|更专业、更落地、更有传播力)下一代企业网络:从 “能用” 到 “好用”,打造数字化时代的核心竞争力
  • 沈阳高端腕表回收科普专业鉴定流程与要点
  • AI公司做场景化Agent,为何比通用智能更早赚钱?
  • Go 语言设计模式大全,2.8 万 Star 的编程参考手册
  • 原来新疆特产这么轻,带多少才不会超重?
  • 本地跑大模型怎么选?国产边缘计算盒子品牌全推荐
  • DaVinci Resolve 21 直装版安装教程
  • Java毕设选题推荐:基于 SpringBoot 的会议室排班统筹管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 摩尔信使MThings中西门子S7数据地址设计说明
  • 颠覆拖拽内卷!AI低代码实现业务流程自主生成
  • 【电赛/毕设榨汁机】天下苦 HAL 库久矣!STM32 极限提速:LL 库混编、位带操作与中断剥离硬核指南
  • [测试技术] Obsidian 是什么?一个适合长期沉淀知识的本地笔记工具
  • 通达信竣宝底部大阳启动量化选股与量化交易指标 大阳不破波浪掘金抓牛股主副图指标 平台突破指标公式
  • GEO系统的企业知识库使用vue如何实现?
  • 浔川代码编辑器 V4.2.0 全新功能发布:轻量化刷题专用编辑器,专为学生编程练习打造
  • go-zero:3.3 万 Star 的 Go 微服务框架,大厂实战打磨出来的
  • ●从零理解 DSI 屏幕撕裂:一条数据流水线的故事
  • 微信聊天记录备份指南:如何安全保存你的数字记忆?
  • AI缺席的艺术:守护留白的智能