openlayers [九] 地图覆盖物overlay三种常用用法 popup弹窗,marker标注,text文本

news2024/11/18 6:42:17

文章目录

    • 简介
    • overlay 实现popup弹窗
    • overlay 实现label 标注信息
    • overlay实现 text 文本信息
    • 完整代码

简介


常见的地图覆盖物为这三种类型,如:popup弹窗、label标注信息、text文本信息等。

overlay 实现popup弹窗

方法详解

  1. 实例一个 new Overlay(),设置相关的属性,element 是和页面的 最外层弹窗的dom进行绑定
  2. 通过 map.addOverlay(this.overlay) 把 overlay弹窗添加到页面
  3. closer.onclick 添加一个 x 关闭弹窗事件
  4. 通过 this.map.on(“singleclick”, function(evt) 事件点击地图触发弹窗效果

在这里插入图片描述

overlay 实现label 标注信息

// 创建一个标注信息
const addMarker = () => {
	var marker = new Overlay({
		position: fromLonLat([104.043505, 30.58165]),
		positioning: 'center-center',
		element: document.getElementById('marker'),
		stopEvent: false,
	});
	map.value.addOverlay(marker);
};

在这里插入图片描述

overlay实现 text 文本信息

// 创建文字标签 label
const addText = () => {
	var textInfo = new Overlay({
		position: fromLonLat([104.043505, 30.58165]),
		offset: [20, -20],
		element: document.getElementById('textInfo'),
	});
	map.value.addOverlay(textInfo);
};

完整代码

<!--
 * @Author: zhangchao zhang_chao96@163.com
 * @Date: 2023-07-05 15:20:38
 * @LastEditors: zhangchao zhang_chao96@163.com
 * @LastEditTime: 2023-07-06 15:46:16
 * @FilePath: \v3_test\src\views\index.vue
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
	<div id="content">
		<div id="marker"></div>
		<div id="map"></div>
		<div id="textInfo">我是text文本信息</div>

		<div id="popup" class="ol-popup">
			<a href="#" id="popup-closer" class="ol-popup-closer"></a>
			<div id="popup-content" class="popup-content"></div>
		</div>
	</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
import 'ol/ol.css';
import { Map, View } from 'ol';
import { defaults as defaultControls } from 'ol/control';
import Tile from 'ol/layer/Tile';
import { fromLonLat, transform, toLonLat } from 'ol/proj';
import OSM from 'ol/source/OSM';
import Overlay from 'ol/Overlay';
import { toStringHDMS } from 'ol/coordinate';
const map = ref();
const initMap = () => {
	let titleLayer = [
		new Tile({
			source: new OSM(),
		}),
	];
	let view = new View({
		center: fromLonLat([104.912777, 34.730746]), //地图中心坐标
		zoom: 4.5,
	});
	map.value = new Map({
		target: 'map',
		layers: titleLayer,
		view: view,
	});
};
// 创建一个标注信息
const addMarker = () => {
	var marker = new Overlay({
		position: fromLonLat([104.043505, 30.58165]),
		positioning: 'center-center',
		element: document.getElementById('marker'),
		stopEvent: false,
	});
	map.value.addOverlay(marker);
};
// 创建文字标签 label
const addText = () => {
	var textInfo = new Overlay({
		position: fromLonLat([104.043505, 30.58165]),
		offset: [20, -20],
		element: document.getElementById('textInfo'),
	});
	map.value.addOverlay(textInfo);
};
// 弹框
const overlay = ref();
const addPopup = () => {
	// 使用变量存储弹窗所需的 DOM 对象
	var container = document.getElementById('popup');
	var closer = document.getElementById('popup-closer');
	var content = document.getElementById('popup-content');
	overlay.value = new Overlay({
		element: container, //绑定 Overlay 对象和 DOM 对象的
		autoPan: false, // 定义弹出窗口在边缘点击时候可能不完整 设置自动平移效果
		autoPanAnimation: {
			duration: 250, //自动平移效果的动画时间 9毫秒)
		},
	});
	map.value.addOverlay(overlay.value);
	closer.onclick = function () {
		overlay.value.setPosition(undefined);
		closer.blur();
		return false;
	};
	map.value.on('singleclick', function (evt) {
		let coordinate = transform(evt.coordinate, 'EPSG:3857', 'EPSG:4326');
		// 点击尺 (这里是尺(米),并不是经纬度);
		let hdms = toStringHDMS(toLonLat(evt.coordinate)); // 转换为经纬度显示
		content.innerHTML = `
                <p>你点击了这里:</p>
                <p>经纬度:<p><code> ${hdms}  </code> <p>
                <p>坐标:</p>X:${coordinate[0]} &nbsp;&nbsp; Y: ${coordinate[1]}`;
		overlay.value.setPosition(evt.coordinate); //把 overlay 显示到指定的 x,y坐标
	});
};
onMounted(() => {
	initMap();
	addMarker();
	addText();
	addPopup();
});
</script>
<style lang="scss" scoped>
#content,
#map {
	height: 100%;
}
#marker {
	width: 20px;
	height: 20px;
	background: red;
	border-radius: 50%;
}
#textInfo {
	width: 200px;
	height: 40px;
	line-height: 40px;
	background: burlywood;
	color: yellow;
	text-align: center;
	font-size: 20px;
}

.ol-popup {
	position: absolute;
	background-color: white;
	-webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
	filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
	padding: 15px;
	border-radius: 10px;
	border: 1px solid #cccccc;
	bottom: 12px;
	left: -50px;
}
.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;
}
.ol-popup-closer {
	text-decoration: none;
	position: absolute;
	top: 2px;
	right: 8px;
}
.popup-content {
	width: 400px;
}
.ol-popup-closer:after {
	content: '✖';
}
</style>

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

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

相关文章

链动2+1模式:月流水6000万是怎么做到的?

一个好的企业往往只需要最简单的营销方式。当我们面对当今的商业市场&#xff0c;琳琅满目的商业模式&#xff0c;应接不暇的营销方案&#xff0c;我们一定会举足无措的不知道怎么选择。因为一个好的公司或企业&#xff0c;一定要有一个十分经得起推敲的模式来面对消费者。 那么…

对m3u8视频进行批量采集

一、相关网页&#xff08;网页链接&#xff1a;https://www.acfun.cn/v/ac36564705&#xff09; 二、多视频采集网页&#xff08;找出每个视频ID&#xff09; 三、相关代码&#xff08;代码含有注释&#xff09; # Time: 2024/1/18 22:57 # Author: 马龙强 # File: 对m3u8视频…

有效防范网络风险的关键措施

在数字化时代&#xff0c;企业面临着日益复杂和频繁的网络风险。提高员工的网络安全意识是防范网络威胁的关键一步。本文将探讨企业在提升网络安全意识方面可以采取的措施&#xff0c;以有效预防潜在的网络风险。 1. 开展网络安全培训&#xff1a;企业应定期组织网络安全培训&…

Android Studio读写低频RFID T5557卡源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?id675212889085&spma1z10.5-c.w4002-21818769070.13.21166f89nKgnJ7 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xml…

【AI绘画+本地部署】基于krita的AI绘画(含windows一键整合包)

comfyuikrita所有相关资源整合包(无需下载后面链接)百度网盘&#xff1a;https://pan.baidu.com/s/1iwNRpdTaD26YbzSDm6WLDA?pwdbur8 –来自百度网盘超级会员V4的分享 krita绘画软件官网地址 https://krita.org/en/download/krita-desktop/ krita-ai-diffusion 插件&#xff…

对java的interface的理解

一个例子来让我们理解更加深刻 这是我们的整体文件布局 ①A是接口 ②B和C是用来实现接口的类 ③show是我们的运行函数&#xff0c;用来展示 A接口 接口中定义的方法可以不用去实现,用其他类去实现(必须实现) 关键字:interface public interface A { // public static …

Redis分布式锁存在的问题及解决方案(值得珍藏)

Redis分布式锁存在的问题 在购票软件的情境中&#xff0c;当仅剩一张或几张票时&#xff0c;众多用户同时尝试购买。在不考虑任何外部干扰的情况下&#xff0c;逻辑上&#xff0c;系统应首先检查是否还有余票。如果仍有余票&#xff0c;用户可以顺利购买并导致库存相应减少&am…

鸿蒙next开发-OpenHarmony的NDK开发

Native API&#xff08;NDK&#xff09;入门 Native API是OpenHarmony SDK上提供的一组native开发接口与工具集合&#xff08;也称为NDK&#xff09;&#xff0c;方便开发者使用C或者C语言实现应用的关键功能。Native API只覆盖了OHOS基础的一些底层能力&#xff0c;如libc&am…

史上最全EasyExcel

一、EasyExcel介绍 1、数据导入&#xff1a;减轻录入工作量 2、数据导出&#xff1a;统计信息归档 3、数据传输&#xff1a;异构系统之间数据传输 二、EasyExcel特点 Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内…

制作一个Python聊天机器人

我们学习一下如何使用 ChatterBot 库在 Python 中创建聊天机器人&#xff0c;该库实现了各种机器学习算法来生成响应对话&#xff0c;还是挺不错的 什么是聊天机器人 聊天机器人也称为聊天机器人、机器人、人工代理等&#xff0c;基本上是由人工智能驱动的软件程序&#xff0…

代码随想录训练营第三十天|332.重新安排行程51. N皇后37. 解数独

332.重新安排行程 采用哈希表方式进行储存出发点和到达点&#xff0c;终止条件是result中的机场数量为机票1&#xff1b; 重点在于哈希表的运用和遍历方法 51. N皇后 wtf? 回溯算法非常形象的N叉树解法&#xff1a; 输入n&#xff0c;row col,chessboard 终止条件&#x…

2024年pmp的考试时间是什么时候?

2024最新考试时间已经出来了&#xff1a;分别是 3月、6月、8月、11月&#xff0c;四次&#xff0c;具体考试日期还需要关注官网的进一步通知。 一、PMP报考条件 年龄满足 22 周岁有官方授权的培训机构给的 35个PDU&#xff08;学时&#xff09; 就能报名。 是不是相当于没有…

[Python] 如何通过ctypes库来调用C++ 动态库 DLL?

ctypes库介绍 ctypes是Python的一个外部库,它提供了一种灵活的方式来调用C语言的动态链接库(DLL)或共享库(SO)。通过ctypes,我们可以在Python中直接调用C语言编写的函数和变量,从而实现跨语言的互操作。 ctypes 它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的…

本地MinIO存储服务通过Java程序结合Cpolar内网穿透进行远程连接

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 前言 MinIO是一款高性能、分布式的对象存储系统&#xff0c;它可以100%的运行在标准硬件上&#xff0c;即X86等…

【Linux系列】在Pop!OS的启动器中添加自定义程序图标

文章目录 前言一、创建快捷方式二、快捷方式参数三、添加右键菜单和注册MIME 前言 无论是在Windows上&#xff0c;还是Linux&#xff0c;或者安卓这些我们常用的操作系统上&#xff0c;一些应用程序的快捷方式放在桌面或者启动器&#xff0c;只需要简单的点击就可以启动&#…

【算法】串联所有单词的子串【滑动窗口】

题目 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。例如&#xff0c;如果 words ["ab","cd","ef"]&#xff0c; 那么 "abcd…

Unity 编辑器篇|(十一)Gizmos (全面总结 | 建议收藏)

目录 1. 前言2 参数总览3 Gizmos绘制3.1 立方体&#xff1a;DrawCube3.2 视锥&#xff1a;DrawFrustum3.3 贴图&#xff1a;DrawGUITexture3.4 图标&#xff1a;DrawIcon3.5 线段&#xff1a;DrawLine3.6 网格&#xff1a;DrawMesh3.7 射线&#xff1a;DrawRay3.8 球体&#xf…

PBR材质背光面太暗优化

图形学中漫反射光照遵循兰伯特光照模型&#xff0c;它的公式如下 其中&#xff1a; &#xff1a;漫反射光颜色 &#xff1a;入射光颜色 &#xff1a;材质的漫反射系数 &#xff1a;法线方向 &#xff1a;光源方向 由于背光面的法线方向和光源方向的点积为负数&#xff0c;因此…

为什么 Golang Fasthttp 选择使用 slice 而非 map 存储请求数据

文章目录 Slice vs Map&#xff1a;基本概念内存分配和性能Fasthttp 中的 SliceMap性能优化的深层原因HTTP Headers 的特性CPU 预加载特性 结论 Fasthttp 是一个高性能的 Golang HTTP 框架&#xff0c;它在设计上做了许多优化以提高性能。其中一个显著的设计选择是使用 slice 而…

golang 中使用 statik 将静态资源编译进二进制文件中

现在的很多程序都会提供一个 Dashboard 类似的页面用于查看程序状态并进行一些管理的功能&#xff0c;通常都不会很复杂&#xff0c;但是其中用到的图片和网页的一些静态资源&#xff0c;如果需要用户额外存放在一个目录&#xff0c;也不是很方便&#xff0c;如果能打包进程序发…