二十五、openlayers官网示例CustomOverviewMap解析——实现鹰眼地图、预览窗口、小窗窗口地图、旋转控件

官网demo地址:

 Custom Overview Map

这个示例展示了如何在地图上增加一个小窗窗口的地图并跟随着地图的旋转而旋转视角。

首先加载了一个地图。其中 DragRotateAndZoom是一个交互事件,它可以实现按住shift键鼠标拖拽旋转地图。

 const map = new Map({interactions: defaultInteractions().extend([new DragRotateAndZoom()]),layers: [new TileLayer({source: new XYZ({url: "http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",}),zIndex: 1,}),],target: "map",view: new View({center: [500000, 6000000],zoom: 7,}),});

然后是实例化了OverviewMap类来实现鹰眼地图。

const overviewMapControl = new OverviewMap({className: "ol-overviewmap ol-custom-overviewmap",layers: [new TileLayer({source: new XYZ({url: "http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",}),zIndex: 1,}),],// 设置控制面板折叠时显示的标签,"\u00BB" 是一个右双尖括号(»)。collapseLabel: "\u00BB",//设置控制面板展开时显示的标签,"\u00AB" 是一个左双尖括号(«)label: "\u00AB",//设置 OverviewMap 控件初始化时是否是折叠状态。false 表示默认展开。collapsed: false,});

collapseLabel接受两种类型的参数string | HTMLElement ,所以也可以自己定义一个图标。

<i class="el-icon-edit" ref="edit_icon"></i>
collapseLabel: this.$refs.edit_icon

因为地图设置了按住shift键旋转,所以这个小窗口也需要设置一下是否跟随旋转。setRotateWithView(true/false) 

overviewMapControl.setRotateWithView(this.checked);

然后,在初始化map的时候将overviewMapControl加进去就可以了。

const map = new Map({controls: defaultControls().extend([overviewMapControl]),
})

 小细节:

new OverviewMap的className参数要么不传,要传自定义类名的话需要加上它的默认值.ol-overviewmap

我原本以为可以随便自定义,于是只写了一个test。

const overviewMapControl = new OverviewMap({className: "test",
})

调整样式后发现点击折叠按钮无法控制它显示隐藏。

翻看文档和源码后得知,展示/折叠的按钮点击事件中是通过是否加上ol-collapsed类名来控制小窗显隐的。

而起隐藏作用的css是这样写的,带上了它原本的默认类名.ol-overviewmap

所以,如果要自定义类名要在加上它的默认值ol-overviewmap 

  //   className: "ol-overviewmap test",

完整代码:

<template><div class="box"><h1>OverviewMap</h1><div id="map" class="map"></div><div><label><input type="checkbox" id="rotateWithView" /> Rotate with view</label></div><i class="el-icon-edit" ref="edit_icon"></i><i class="el-icon-share" ref="share_icon"></i></div>
</template><script>
import Map from "ol/Map.js";
import OSM from "ol/source/OSM.js";
import TileLayer from "ol/layer/Tile.js";
import View from "ol/View.js";
import { XYZ } from "ol/source";
import {DragRotateAndZoom,defaults as defaultInteractions,
} from "ol/interaction.js";
import { OverviewMap, defaults as defaultControls } from "ol/control.js";export default {name: "",components: {},data() {return {map: null,};},computed: {},created() {},mounted() {const rotateWithView = document.getElementById("rotateWithView");const overviewMapControl = new OverviewMap({className: "ol-overviewmap ol-custom-overviewmap",//   className: "ol-overviewmap test",layers: [new TileLayer({source: new XYZ({url: "http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",}),zIndex: 1,}),],// 设置控制面板折叠时显示的标签,"\u00BB" 是一个右双尖括号(»)。//collapseLabel: "\u00BB",//设置控制面板展开时显示的标签,"\u00AB" 是一个左双尖括号(«)//label: "\u00AB",label: this.$refs.share_icon,collapseLabel: this.$refs.edit_icon,//设置 OverviewMap 控件初始化时是否是折叠状态。false 表示默认展开。collapsed: false,});rotateWithView.addEventListener("change", function () {overviewMapControl.setRotateWithView(this.checked);});const map = new Map({controls: defaultControls().extend([overviewMapControl]),interactions: defaultInteractions().extend([new DragRotateAndZoom()]),layers: [new TileLayer({source: new XYZ({url: "http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",}),zIndex: 1,}),],target: "map",view: new View({center: [500000, 6000000],zoom: 7,}),});},methods: {},
};
</script><style lang="scss" >
#map {width: 100%;height: 500px;
}
.box {height: 100%;
}.map .ol-custom-overviewmap,
.map .ol-custom-overviewmap.ol-uncollapsible {bottom: auto;left: auto;right: 0;top: 0;
}.map .ol-custom-overviewmap:not(.ol-collapsed) {border: 1px solid black;
}.map .ol-custom-overviewmap .ol-overviewmap-map {border: none;width: 300px;
}.map .ol-custom-overviewmap .ol-overviewmap-box {border: 2px solid red;
}.map .ol-custom-overviewmap:not(.ol-collapsed) button {bottom: auto;left: auto;right: 1px;top: 1px;
}
.map .ol-rotate {top: 170px;right: 0;
}
.map .ol-overviewmap-map {height: 150px;
}
// 以下为测试代码
.map .test {border: none;width: 200px;height: 150px;border: 2px solid red;position: absolute;right: 0;
}
.map .test:not(.ol-collapsed) button {position: absolute;bottom: auto;left: auto;right: 1px;top: 1px;
}.test.ol-collapsed .ol-overviewmap-map,
.test.ol-uncollapsible button {display: none;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

客户端Web资源缓存

为了提高Web服务器的性能,其中的一种可以提高Web服务器性能的方法就是采用缓存技术。 1.缓存 1.1.什么是缓存&#xff1f; 如果某个资源的计算耗时或耗资源&#xff0c;则执行一次并存储结果。当有人随后请求该资源时&#xff0c;返回存储的结果&#xff0c;而不是再次计算。…

【Linux】-Flink分布式内存计算集群部署[21]

注意&#xff1a; 本节的操作&#xff0c;需要前置准备好Hadoop生态集群&#xff0c;请先部署好Hadoop环境 简介 Flink同spark一样&#xff0c;是一款分布式内存计算引擎&#xff0c;可以支撑海量数据的分布式计算 Flink在大数据体系同样是明星产品&#xff0c;作为新一代的…

ElasticSearch集群重平衡(Shard allocation)案例分析及性能调优

何谓重平衡 ElasticSearch为了使数据平均分布在集群节点上&#xff0c;重平衡机制会由Master节点决定索引分片具体分配到哪个Data节点以及何时在节点之间迁移分片&#xff0c;使分片在数据大小、分片数量的层面上尽可能均匀分布在集群中的所有Data节点&#xff0c;充分发挥每个…

css - sass or scss ?

总的来说&#xff0c;Sass 和 SCSS 提供的功能是一样的&#xff0c;选择哪种语法主要取决于你的个人或团队的偏好。

4.2 循环语句(for, while)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【Linux取经路】基于信号量和环形队列的生产消费者模型

文章目录 一、POSIX 信号量二、POSIX 信号量的接口2.1 sem_init——初始化信号量2.2 sem_destroy——销毁信号量2.3 sem_wait——等待信号量2.4 sem_post——发布信号量 三、基于环形队列的生产消费者模型3.1 单生产单消费模型3.2 多生产多消费模型3.3 基于任务的多生产多消费模…

期货学习笔记-横盘行情学习1

横盘行情的特征及分类 横盘行情的概念 横盘行情时中继形态的一种&#xff0c;一般常出现在大涨或大跌之后出现横盘行情是对当前趋势行情的修正&#xff0c;是对市场零散筹码的清理&#xff0c;是为了集中筹码更便于后期行情的展开 横盘行情的特征 1.水平运动&#xff1a;该…

【文献阅读】ESG评级不确定性对企业绿色创新的影响研究

ESG评级不确定性对企业绿色创新的影响研究 张张张三丰de思考与感悟 论文内容总结&#xff1a;本文主要是关于ESG评级不确定性&#xff08;也即来自三个评级机构的ESG得分差异&#xff09;&#xff0c;对企业绿色创新的影响。并且有效地区分了创新数量和创新质量。创新数量的是专…

iptablese防火墙【SNAT和DNAT】

目录 1.SNAT策略及应用 1.1SNAT原理与应用 1.2 SNAT策略的工作原理 1.3 实验操练 2.DNAT策略 2.1 DNAT策略的概述 2.2 DNAT原理与应用 2.3 实验操练 1.SNAT策略及应用 1.1SNAT原理与应用 SNAT 应用环境&#xff1a;局域网主机共享单个公网IP地址接入Internet&#xf…

uniappx 应用未读角标插件(完善推送、通知、消息效果) Ba-Shortcut-Badge-U

简介&#xff08;下载地址&#xff09; Ba-Shortcut-Badge-U 是设置应用未读角标的原生插件&#xff0c;UTS版本&#xff08;同时支持uniapp和uniappx&#xff09; 支持设置未读、清空未读支持机型有Huawei、oppo、xiaomi、Samsung、Sony、LG、HTC、ZUK、ASUS、ADW、APEX、NO…

快速将短信从 Android 传输到 iPhone [支持 iPhone 15]

短信中包含有关工作和生活的重要信息&#xff0c;因此当我们拿到新手机时&#xff0c;它们不会丢失。今天&#xff0c;我们要讨论的是如何将短信从Android快速传输到iPhone&#xff0c;包括最新的iPhone 15。在Android和iOS操作系统之间&#xff0c;我们可以轻松地将短信从Andr…

C语言(指针)8

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;关注收藏&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#x…

BUUCTF-misc23

[GUET-CTF2019]zips1 1.打开附件 是一个加密的压缩包 2.暴力破解压缩包 得到压缩包密码 3.010Editor 解密之后又得到一个加密的压缩包 发现不是解密文件 用010Editor打开是伪加密&#xff0c;将09 00 给为 00 00 4.Python 用Python运行文件里的部分内容&#xff0c;发现密…

高精度可编程直流电源功能

在电子产品开发和测试中&#xff0c;高精度可编程直流电源是一种非常重要的工具。它不仅能够提供稳定可靠的电源供应&#xff0c;还能够精确地控制输出电压和电流,满足各种复杂的测试需求。下面我们就来详细了解一下高精度可编程直流电源的功能特点。 1. 输出精度高 高精度可…

基于深度学习OCR文本识别

第一步&#xff1a;概要 基于深度学习OCR文本识别分为两个模块&#xff1a;DBNet和CRNN。 DBNet是基于分割的文本检测算法&#xff0c;算法将可微分二值化模块(Differentiable Binarization)引入了分割模型&#xff0c;使得模型能够通过自适应的阈值图进行二值化&#xff0c;并…

php发送短信功能(创蓝短信)

一、以下是创蓝发送短信的功能&#xff0c;可以直接执行&#xff1a; <?php$phone 12312312312;$msg 测试短信功能;echo 发送手机号&#xff1a;.$phone.<br/>;echo 发送内容&#xff1a;.$msg.<br/>;$send sendMessage($phone, $msg);var_dump($send);…

HQL面试题练习 —— 品牌营销活动天数

题目来源&#xff1a;小红书 目录 1 题目2 建表语句3 题解 1 题目 有营销活动记录表&#xff0c;记录了每个品牌每次营销活动的开始日期和营销活动的结束日期&#xff0c;现需要统计出每个品牌的总营销天数。 注意&#xff1a; 1:苹果第一行数据的营销结束日期比第二行数据的营…

sam代码简析

Segment Anything&#xff1a;建立了迄今为止最大的分割数据集&#xff0c;在1100万张图像上有超过1亿个掩码&#xff0c;模型的设计和训练是灵活的&#xff0c;其重要的特点是Zero-shot(零样本迁移性)转移到新的图像分布和任务&#xff0c;一个图像分割新的任务、模型和数据集…

记录centos中操作(查找、结束、批量)进程以及crontab定时写法的知识

环境&#xff1a;vps&#xff0c;centos7&#xff0c;python3。 近期写了个python程序&#xff0c;用青龙面板在centos上运行。程序中有while无限循环&#xff0c;但是我在青龙中设置了定时任务&#xff08;每隔半小时运行一次&#xff09;&#xff0c;于是造成了进程中有多个…

Java进阶16 单元测试XML注解

Java进阶16 一、单元测试 单元测试就是针对最小的功能单元编写测试代码&#xff0c;Java程序最小的功能单元是方法&#xff0c;因此&#xff0c;单原测试就是针对Java方法的测试&#xff0c;进而检查方法的正确性。简单理解就是测试代码的工具。 1、Junit 1.1 Junit引入 目…