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

mapbox popup(动态定位)查询属性方法

标题popup 动态描点位置,防止内容遮盖

functionqueryFeatures(e){constfeatures=window.map.queryRenderedFeatures?window.map.queryRenderedFeatures(e.point,{if(!features||!features.length){ElMessage({message:"未查询到相关要素",type:"warning",});return};constfeature=features[0];constproperties=feature.properties||{};constpopupTitle=`<div style="padding:8px;color:#fff;border-bottom:1px solid #ccc;">元素属性</div>`;letpopupContent='<div class="attr-list style="font-size:13px">';// 过滤出有意义的属性键constkeys=Object.keys(properties||{}).filter((k)=>properties[k]!==null&&properties[k]!==undefined&&properties[k]!=="");if(keys.length===0){// 无属性时展示提示与几何摘要popupContent+=`<div style="padding:8px;color:#fff">该要素无属性</div>`;constgeom=feature.geometry||{};if(geom.type){popupContent+=`<div style="padding:6px 8px;color:#fff">类型:${geom.type}</div>`;try{if(Array.isArray(geom.coordinates)){// 简单统计坐标点数量(对不同几何类型做基本处理)letcount=0;if(geom.type==="Point")count=1;elseif(geom.type==="LineString")count=geom.coordinates.length;elseif(geom.type==="Polygon")count=(geom.coordinates[0]||[]).length;elsecount=JSON.stringify(geom.coordinates).length;popupContent+=`<div style="padding:6px 8px;color:#fff">坐标点数量:${count}</div>`;}}catch(err){// 忽略统计错误}}}else{popupContent=``;// 有属性时按 key-value 显示keys.forEach(([key])=>{});// 清空内容keys.forEach((key)=>{constvalue=properties[key];popupContent+=`<div style="margin:6px;display:flex;align-items:center;"> <strong style="display:inline-block;min-width:90px;color:#fff">${key}:</strong> <span style="color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;max-width:calc(100% - 110px);" title="${String(value)}">${String(value)}</span> </div>`;});}popupContent+="</div>";letpopupContentBox=`${popupTitle}<div class="mapboxgl-popup-content">${popupContent}</div>`;// 在创建 Popup 前判断constpoint=window.map.project(e.lngLat);// 转为屏幕像素坐标constmapHeight=window.map.getContainer().offsetHeight;constmapWidth=window.map.getContainer().offsetWidth;constvDir=point.y>mapHeight/2?'bottom':'top';consthDir=point.x>mapWidth/2?'right':'left';constanchor=`${vDir}-${hDir}`;// 例如: 'bottom-right', 'top-left'newcompassengine.Popup({closeButton:true,closeOnClick:true,offset:15,anchor:anchor,}).setLngLat(e.lngLat).setHTML(popupContentBox).addTo(window.map);}
http://www.jsqmd.com/news/712638/

相关文章:

  • 2025开源AI智能体框架全景解析与应用指南
  • Docker Remote 未授权访问漏洞修复方法
  • 2026年小程序商城SaaS平台
  • Zeptoclaw:基于DMA的无中断舵机驱动库,释放MCU性能
  • 文件上传漏洞:边界检验的艺术
  • 终极实战指南:iOS 15-16设备激活锁离线绕过完整解决方案
  • 详解CN域名注册:流程、要求、材料及注意事项全解析
  • 二次元插画创作指南:用real-anime-z快速生成角色与宣传图
  • LLM长时上下文处理:双路径压缩与LoRA蒸馏优化
  • Evently:.NET开源事件管理引擎,简化事件驱动架构开发
  • 长短期记忆网络大跨桥梁振动响应时频分解系统【附代码】
  • SonnetDB:.NET 生态下的高性能嵌入式时序数据库
  • 470-510MHz频段无线通信系统设计与CC1100E+CC1190方案优化
  • 文件上传漏洞实验1(PortSwigger_Labs)
  • 钩子机制如何实现动态逻辑注入
  • CSS Grid布局完全指南:构建复杂的响应式布局
  • 模力方舟Moark:构建中国AI自主生态的关键基础设施
  • 2026年3月铜覆钢供应商推荐,让你选对供应商,铜覆钢角钢/铜排焊接模具/石墨接地绳/镀铜钢管,铜覆钢制造企业推荐 - 品牌推荐师
  • ARMv9内存管理:TCR2MASK_EL1寄存器详解与应用
  • 故障仿真与数据驱动融合高速列车轴箱轴承故障识别【附代码】
  • 软考高级系统架构设计师备考(二十四):软件工程—软件系统建模
  • Profinet转EtherCAT网关通讯架构及EtherCAT超距故障解决原理
  • ToDesk功能全解析:这五个场景,让你的远程办公效率翻倍
  • 【高标准农田】面向农业病虫害识别的田间实时感知高质量图像数据集建设方案:总体架构与技术路线、田间实时感知与数据采集子系统...
  • 别再只点灯了!用Arduino Uno R3的6个模拟引脚做个简易温湿度计(附完整代码)
  • 挖掘机柴油机多工况智能故障识别系统设计【附代码】
  • 轻量化域适应网络轮对轴承系统故障检测实现【附代码】
  • 计算机网络——应用层
  • Flutter网络请求最佳实践:构建可靠的网络应用
  • Wox深度解析:跨平台启动器的架构设计与实战指南