191.Vue3 + OpenLayers 实战:可控化版权信息(Attribution)详解与完整示例
一、效果目标我们要实现以下效果✅ 自定义版权内容HTML✅ 内置版权右下角可折叠✅ 外部版权自定义位置展示✅ 自定义按钮样式✅ 控制是否折叠 二、为什么要关注 Attribution在使用 OSM、天地图、ArcGIS 等地图服务时版权信息是必须展示的否则可能存在法律风险。OpenLayers 默认会帮我们处理版权信息但❌ 默认样式不可控❌ 位置固定右下角❌ UI 不符合项目设计 所以我们需要“可控化版权信息”⚙️ 三、核心代码实现Vue3 Composition API!-- * Author: 彭麒 * Date: 2025/4/8 * Email: 1062470959qq.com * Description: 此源码版权归吉檀迦俐所有可供学习和借鉴或商用。 -- template div classcontainer div classw-full flex justify-center flex-wrap div classfont-bold text-[24px] vue3 openlayers可控化版权信息学习Attribution各种API示例展示 /div /div div refmapRef classmap-x/div div refoutAttrRef/div /div /template script setup import { ref, onMounted } from vue import ol/ol.css import { Map, View } from ol import Tile from ol/layer/Tile import OSM from ol/source/OSM import { Attribution, defaults as defaultControls } from ol/control // DOM引用 const mapRef ref(null) const outAttrRef ref(null) // 地图实例 let map null const initMap () { const copyrightInfo a hrefhttps://pengqi.blog.csdn.net/ target_blankcopy; 我的个性化版权信息/a // 内部版权控件右下角 const inAttribution new Attribution({ collapsible: true, collapsed: true, label: C, tipLabel: 版权信息, collapseLabel: }) // 外部版权控件自定义容器 const outAttribution new Attribution({ collapsible: false, target: outAttrRef.value, className: myCustomClass, expandClassName: myExpandClass }) map new Map({ target: mapRef.value, layers: [ new Tile({ source: new OSM({ attributions: copyrightInfo }) }) ], view: new View({ projection: EPSG:4326, center: [114.064839, 22.548857], zoom: 4 }), controls: defaultControls({ attribution: false }).extend([ inAttribution, outAttribution ]) }) } onMounted(() { initMap() }) /script style scoped .container { width: 840px; height: 580px; margin: 0 auto; border: 1px solid #42B983; } .map-x { width: 800px; height: 400px; margin: 0 auto; border: 1px solid #42B983; } .myCustomClass { width: 100%; } .myExpandClass .ol-control button { background: #0000ff !important; } /style 四、Attribution 核心 API 详解1️⃣ collapsible是否可折叠collapsible: truetrue可以折叠默认false始终展开2️⃣ collapsed初始是否折叠collapsed: truetrue默认收起false默认展开3️⃣ label折叠按钮文字label: C 你可以改成图标、文字比如“©”“版权”自定义 SVG4️⃣ tipLabel鼠标提示tipLabel: 版权信息 鼠标 hover 提示内容5️⃣ collapseLabel展开后按钮collapseLabel: 控制“收起按钮”的内容6️⃣ target重点target: outAttrRef.value 作用把版权信息挂载到外部 DOM实现 UI 完全自定义 五、内置 vs 外置 Attribution类型特点内置默认右下角适合快速使用外置完全自定义位置推荐项目使用 本文实现了双 Attribution 共存controls: defaultControls({ attribution: false }).extend([ inAttribution, outAttribution ]) 六、样式自定义技巧.myExpandClass .ol-control button { background: #0000ff !important; }你可以做到改颜色改按钮形状改位置absolute布局改字体 七、进阶玩法项目必备✅ 1. 动态切换版权多底图source.setAttributions(新的版权信息) 用于切换 OSM / 天地图 / 卫星图无人机影像图✅ 2. 完全 Vue 化控制 不用 OpenLayers UI自己写弹窗tooltipfooter✅ 3. 与业务结合无人机巡检你可以这样用飞行轨迹 → 显示数据来源版权不同任务 → 显示不同版权私有地图 → 加公司 logo 声明⚠️ 八、常见坑❌ 1. target 为空target: outAttrRef.value 必须在onMounted后使用❌ 2. 默认 Attribution 未关闭defaultControls({ attribution: false }) 否则会出现重复版权❌ 3. HTML 未生效 attribution 支持 HTML但要注意字符串格式正确标签闭合 九、总结通过本文你已经掌握✅ Attribution 的所有核心 API✅ 内置 外置双模式实现✅ Vue3 Composition 写法✅ 高级 UI 控制方式✅ 项目实战扩展思路 最后一句在 WebGIS 项目里细节决定专业度。 Attribution 虽小但体现的是你对“工程规范 用户体验”的理解。如果你想继续进阶 我可以帮你升级这套代码到 多地图源切换天地图 / 高德 / OSM 无人机航线 点位展示 海量点位优化聚合 / WebGL 企业级 GIS 架构直接说一句“升级GIS项目版”
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425748.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!