openlayers根据下拉框选项在地图上显示图标

news2024/11/29 0:32:46

这里是关于一个根据下拉框的选项在地图上显示图标的需求,用的是vue+openlayers

显示效果大概是这样:

选中选项之后会跳转到所点击的城市,并且在地图上显示图标+温度,这一块UI没设计我就大概先弄了一下,比较丑。。

首先放一个层

<div id="weatherInfo"></div>
//下面是遮盖物的div
<div id="temperatureOverlay" ></div>

接下来是js部分,首先创建一个地图,我这里使用的是本地静态切片。

const center = ol.proj.transform([112, 38.42], 'EPSG:4326', 'EPSG:3857');
						
						const map = new ol.Map({
						target: 'map',
						layers: [
							
							
						
							new ol.layer.Tile({
							source: new ol.source.XYZ({
								url: 'satellite/{z}/{x}/{y}.jpg'
							}),
							isGroup: true,
						
							}),
							new ol.layer.Tile({
							source: new ol.source.XYZ({
								url: 'overlay/{z}/{x}/{y}.png'
								
							}),
							isGroup: true,
							name: '天地图文字标注'
							}),
						],

						view: new ol.View({
							center: center,
							zoom:4
						})
						})

接下来是用本地的数据生成下拉框选项,以及绘制/创建天气text覆盖物

//创建天气列表
							const cityWeatherData = [
							{
								city: '北京',
								temperature: 25,
								icon: 'icon/sun.png',
								coordinates: [116.4074, 39.9042]
							},
							{
								city: '上海',
								temperature: 28,
								icon: 'icon/sun.png',
								coordinates: [121.4737, 31.2304]
							},
							// 其他城市的天气数据
							];

							const citySelect = document.getElementById('citySelect');
							const iconLayer = new ol.layer.Vector({
							source: new ol.source.Vector()
							});
							map.addLayer(iconLayer);

							cityWeatherData.forEach(function(data) {
							const option = document.createElement('option');
							option.value = data.city;
							option.textContent = data.city;
							citySelect.appendChild(option);
							});

							const weatherInfo = document.getElementById('weatherInfo');

							citySelect.addEventListener('change', function() {
							const selectedCity = citySelect.value;
							const selectedWeatherData = cityWeatherData.find(function(data) {
								return data.city === selectedCity;
							});
							iconLayer.getSource().clear();

							if (selectedWeatherData) {
								const iconFeature = new ol.Feature({
								geometry: new ol.geom.Point(ol.proj.fromLonLat(selectedWeatherData.coordinates)),
								name: selectedWeatherData.city,
								temperature: selectedWeatherData.temperature,
								icon: selectedWeatherData.icon
								});
								const iconStyle = new ol.style.Style({
								image: new ol.style.Icon({
									src: selectedWeatherData.icon,
									scale: 0.5
								})
								});
								iconFeature.setStyle(iconStyle);
								iconLayer.getSource().addFeature(iconFeature);
								map.getView().animate({
								center: ol.proj.fromLonLat(selectedWeatherData.coordinates),
								zoom: 10
								});
							} else {
								iconLayer.getSource().clear();
								map.getView().animate({
								center: ol.proj.fromLonLat([0, 0]),
								zoom: 2
								});
							}
							});
						// 创建天气温度覆盖物
						const temperatureOverlay = new ol.Overlay({
						element: document.getElementById('temperatureOverlay'),
						positioning: 'bottom-center',
						offset: [0, -10],
						stopEvent: false // 允许覆盖物接收事件
						});
						map.addOverlay(temperatureOverlay);

						// 在城市选择事件中更新天气温度覆盖物
						citySelect.addEventListener('change', function() {
						const selectedCity = citySelect.value;
						const selectedWeatherData = cityWeatherData.find(function(data) {
							return data.city === selectedCity;
						});

						if (selectedWeatherData) {
							// 更新覆盖物内容
							const temperatureElement = temperatureOverlay.getElement();
							temperatureElement.innerHTML = selectedWeatherData.temperature + '°C';

							// 更新覆盖物位置
							temperatureOverlay.setPosition(ol.proj.fromLonLat(selectedWeatherData.coordinates));
						} else {
							// 隐藏覆盖物
							temperatureOverlay.setPosition(undefined);
						}
						});

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

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

相关文章

【JAVA】 String 方法附件

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 String 方法 String 方法 char charAt(int index)返回指定索引处的 char 值。int compareTo(Object o) 把这个字符串和另一个对象比较。 int compareTo(String anotherString)按…

如何才能做Cox呢?今天带来Cox回归分析步骤详解

Cox回归是生存分析中运用最多的一个模型&#xff0c;又称为比例风险回归模型(proportional hazards model)。是由英国统计学家D.R.Cox在1962年提出的&#xff0c;为了表示对他的尊敬&#xff0c;所以大家以他的名字命名这个模型。这是一种半参数回归模型&#xff0c;以结局和生…

linux | vscode | makefile | c++编译和调试

简单介绍环境&#xff1a; vscode 、centos、 gcc、g、makefile 简单来说就是&#xff0c;写好项目然后再自己写makefile脚本实现编译。所以看这篇博客的用户需要了解gcc编译的一些常用命令以及makefile语法。在网上看了很多教程&#xff0c;以及官网也看了很多次&#xff0c;最…

Kakfa 入门到起飞 - Kafka 遭大家诟病了?因为啥?啥是再平衡?

Kafka 遭大家诟病了&#xff1f;因为啥&#xff1f;啥是再平衡&#xff1f; 再均衡是Kafka被大家诟病最多的一个点&#xff0c;再平衡是非常麻烦的一个事&#xff0c;那么就让我们来看看 到底什么是再平衡呢&#xff1f; 再平衡其实就是一个 协议&#xff0c;它规定了消费者…

0成本搭建自己的云数据库

第一步&#xff0c;租免费的云服务器 www.aliyun.com 阿里云的&#xff0c;可以免费租三个月 进入主页后选择云服务器ESC 选择这款&#xff0c;点击试用就行 第二步&#xff0c;配置服务器 在配置服务器系统的时候选择centos&#xff0c;省事&#xff0c;别选ubuntu&#x…

Windows 不同方式打开的cmd/dos窗口属性配置不同

文章目录 1. 默认值&#xff08;控制台窗口&#xff09;属性2. "C:\Windows\System32\cmd.exe" 属性3. "命令提示符"属性4. 自定义某标题cmd窗口属性5. cmd快捷方式的属性总结 最近在写某个批处理脚本时&#xff0c;意外发现 Windows系统中&#xff0c;在不…

Is Mapping Necessary for Realistic PointGoal Navigation 论文阅读和代码分析

论文 论文信息 题目&#xff1a;Is Mapping Necessary for Realistic PointGoal Navigation? 作者&#xff1a;Ruslan Partsey、 Erik Wijmans 代码地址&#xff1a;rpartsey.github.io/pointgoalnav 来源&#xff1a;CVPR Abstract 目标&#xff1a;证明显式地图不是成功…

工信部、国家标准委联合印发《国家车联网产业指南(2023 版)》

国家工信部和标委发布了最新的《国家车联网产业标准体系建设指南&#xff08;智能网联汽车&#xff09;&#xff08;2023 版&#xff09;》&#xff0c;了解这篇文章&#xff0c;不论您是智能网联汽车的追随者&#xff0c;还是对智能网联汽车产业前景感兴趣的人&#xff0c;都非…

力扣热门100题之除自身意外数组的成绩【中等】

题目描述 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请不要使用除法&#xff0c;且在 O(n)…

Oracle 迁移 Hive 过程中遇到的问题总结

前言 最近一个小伙伴在做从 Oracle 到 Hive 的业务迁移工作,在迁移过程中属实遇到了一些坑,今天就来汇总一下这些坑,避免以后大家其他业务迁移的时候再出现类似的问题,即使出现了也可以拿过来进行对照解决。 问题1:Distinct window functions are not supported: count(…

matlab二维图形的绘制(1)

概述 matlab数学计算中有时候需要将函数通过图形更加直观的展示给用户的时候就需要使用到二维绘图。绘图常常采用的绘图命令便是 plot &#xff0c;再添加一些辅助命令使得图形更加的形象直观。 二维绘图中也包括针状图&#xff0c;阶梯图&#xff0c;散点图&#xff0c;条形图…

Emacs之实现跨程序选中自动复制功能(一百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

阿里云服务器配置 内存,cpu等等

实例升配&#xff0c;https://help.aliyun.com/document_detail/25438.html?spma2c4g.11174283.6.780.2cbf4c070oeino#title-a5t-gg2-

分布式文件存储与数据缓存 Redis高可用分布式实践(上)

一、Reids概述 1.1 为什么要使用NoSQL 单机Mysql的美好年代 在90年代&#xff0c;一个网站的访问量一般都不大&#xff0c;用单个数据库完全可以轻松应付。在那个时候&#xff0c;更多的都是静态网页&#xff0c;动态交互类型的网站不多。 遇到问题&#xff1a; 随着用户数的…

异构线程池的c++实现方案

概要 通常线程池是同质的&#xff0c;每个线程都可以执行任意的task&#xff08;每个线程中的task顺序执行&#xff09;&#xff0c;如下图所示&#xff1a; 但本文所介绍的线程和task之间有绑定关系&#xff0c;如A task只能跑在A thread上&#xff08;因此称为异构线程池&am…

《脱离“一支笔、一双手、一道力扣”困境的秘诀》:突破LeetCode难题的五个关键步骤

导言&#xff1a; 在解决LeetCode等编程题时&#xff0c;不少人会陷入“一支笔、一双手、一道力扣&#xff08;LeetCode&#xff09;做一宿”的困境。尽管已经掌握了相关知识和算法&#xff0c;但在实际挑战中却无从下手。本文将分享如何摆脱这一困境的秘诀&#xff0c;让你在面…

Java带符号右移(>>)、不带符号右移(>>>)

Java的右移涉及带符号右移&#xff08;>>&#xff09;、不带符号右移&#xff08;>>>&#xff09;。 对于正数&#xff0c;因为符号位是0&#xff0c;带符号右移和不带符号右移左侧都用0填充&#xff0c;所以结果相同。 对于负数&#xff0c;因为符号位是1&…

python + requests实现的电商API接口自动化框架详细教程

1、首先&#xff0c;我们先来理一下思路。 正常的电商接口测试流程是什么&#xff1f; 脑海里的反应是不是这样的&#xff1a; 确定测试接口的工具 —> 配置需要的接口参数 —> 进行测试 —> 检查测试结果&#xff08;有的需要数据库辅助&#xff09; —> 生成测…

第一节:我用Python论证移动平均线(MA)真的靠谱吗?

视频地址&#xff1a;点我查看文章配套视频 什么是MA 所谓“移动平均线”是指一段时间内股票价格的算术平均线&#xff0c;通常以收盘价作为计算值。它是一种趋向类技术指标。 在证券投资中&#xff0c;要赚钱无非是降低成本、提高收入&#xff0c;以期获得较高利润&#xff0…

内存泄漏是什么?有什么危害

内存泄漏是什么&#xff1f;有什么危害 1. 前言1.内存泄漏是什么&#xff1f;2. 为什么会发生内存泄漏3. 内存泄漏的危害4. 总结 1. 前言 在各种项目开发中&#xff0c;内存泄漏是一个很严重的问题。对资源管理、性能优越、系统稳定性&#xff0c;以及是否安全产生极大印象。本…