为开源奉献一份自己的力量:Cesium没有热力图组件,我们自己封装!

大家好,我是日拱一卒的攻城师不浪,专注可视化、数字孪生、前端提效、nodejs、AI学习、GIS等学习沉淀,这是2024年输出的第27/100篇文章。
交流合作:brown_7778

请添加图片描述

前言

热力图,在很多可视化场景开发中会被经常提到,先来了解下它在产品表达方面的突出作用:

  1. 可视化数据密度:热力图通过颜色的渐变展示数据点的密度。例如,在城市规划中,可以用热力图展示某区域内人口的分布密度,帮助决策者了解人口集中的地方。

  2. 突出热点区域:通过颜色的对比,热力图可以很直观地突出某些热点区域。例如,在商业分析中,可以用热力图展示某购物中心的顾客流量,找出最受欢迎的区域。

  3. 简化复杂数据:热力图能将复杂的、难以直接理解的数据变得一目了然。通过颜色的变化,用户可以迅速抓住数据的主要趋势和特征

  4. 空间分析:热力图可以帮助进行空间分析,识别出特定区域的模式异常。例如,在环境监测中,可以使用热力图展示空气质量或污染源分布,帮助环保部门采取措施。

在产品表达方面,热力图的意义在于:

  1. 提高用户体验:热力图可以使数据展示更加直观,用户无需复杂的分析就能迅速理解数据的核心信息。

  2. 支持决策:通过直观的可视化,热力图可以为用户提供有价值的信息支持,帮助他们做出更明智的决策

  3. 数据呈现的美观性:热力图色彩丰富,能够提升数据展示的美观性吸引力,使用户对产品的视觉体验更好。

  4. 增强互动性:许多热力图允许用户进行交互操作,例如放大、缩小、点击查看详细信息等,提高了产品的互动性和用户参与度。

综上所述,热力图在可视化场景中不仅能提升数据可视化的效果,还能为用户提供更直观的分析工具,帮助他们更好地理解和利用数据,做出快速应对和决策

数据类型

在开发热力图之前,我们首先要知道要用到什么样的数据类型,下面我给出一个示例:

{"type": "FeatureCollection","features": [{"type": "Feature","geometry": {"type": "Point","coordinates": [118.01958286942317, 36.81208337028062]},"properties": {"OBJECTID": 275,"lng": 118.019583,"lat": 36.812083,"num": 1}},{"type": "Feature","geometry": {"type": "Point","coordinates": [118.0362495360232, 36.81208337028062]},"properties": {"OBJECTID": 277,"lng": 118.03625,"lat": 36.812083,"num": 0.983159}},//...]
}

可以清晰的看出,features里面包含了一个一个的点位(Point),实际开发过程中主要使用每个点位中的properties属性,包括经纬度以及当前点位的数据值(num)

数据处理

拿到可用的数据之后,我们需要对数据进行处理,整合成我们想要的格式类型

const { res } = await getGeojson("/json/heatMap.json");
const { features } = res;
// 最终要用到的数据格式
let heatData = [];
if (features?.length) {heatData = features.map((item) => {return {x: item.properties.lng,y: item.properties.lat,value: item.properties.num,};});
}

热力图组件封装

cesiumHeatMap = new CesiumHeatmap(viewer, {zoomToLayer: true,points: heatData,heatmapDataOptions: { max: 1, min: 0 },heatmapOptions: {maxOpacity: 1,minOpacity: 0,},
});

Cesium官方并没有直接提供现成的热力图组件,所以我们只能自己动手,丰衣足食了。

这里的CesiumHeatmap就是我们要封装的组件,先来看下它都需要哪些属性:

  • zoomToLayer: 热力图初始化成功之后,相机是否自动定位到热力图区域的上方角度;

  • points:渲染热力图所需要的数据;

  • heatmapDataOptions:每个点都有一个数据值,这里是设置最大最小数据值范围;

  • heatmapOptions:根据数据值的大小设置透明度的范围;

开发这个组件依赖到一位国外大佬的开源库heatmap.js:https://www.patrick-wied.at/static/heatmapjs/

但是库已经很老了,已经接近8年未维护了,所以有些地方不太兼容,在开发过程中作者把源码下下来,把报错的地方修改了一下。

原理

CesiumHeatmap组件的原理其实就是用html的canvas进行绘制,然后在Cesium中创建成图层,根据经纬度坐标屏幕坐标的转换,对区域渲染进行控制,最终添加进Cesium的viewer场景当中。

npm包

目前组件已经发布为【npm包】:https://www.npmjs.com/package/cesium-heatmap-es6

该组件的特点

  • 提供3种绘制方式:Entity实体(可贴模型,有三维效果)、Primitive图元、Layer图层;

  • 提供重绘,通过摄像头的高度进行重绘;

  • 提供heatmap.js的所有配置参数入口;

  • 源码ts编写,发布支持es6umd两种模式;

这个包的发起者是大佬
ONEGISER,后来我在使用过程中有一点小问题,进行修改后与大佬沟通,然后顺理成章的成了开源的贡献者。

组件源码】:https://github.com/cesium-plugin/cesium-heatmap-es6

完整使用源码】:https://github.com/tingyuxuan2302/cesium-vue3-vite

如果开源对你有帮助,也希望点一个免费star,支持作者持续开源。

有需要进技术产品开发交流群(可视化&GIS)可以加我:brown_7778(备注来意),也欢迎数字孪生可视化领域的交流合作。

最后,如果觉得文章对你有帮助,也希望可以一键三连👏👏👏,支持我持续开源和分享~

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

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

相关文章

electron 主进程和渲染进程

最近在整理electron 相关的项目问题,对自己来说也是温故知新,也希望能对小伙伴们有所帮助,大家共同努力共同进步。加油!!!! 虽然最近一年前端大环境不好,但是大家还是要加油鸭&#…

网安零基础入门神书,全面介绍Web渗透核心攻击与防御方式!

Web安全是指Web服务程序的漏洞,通常涵盖Web漏洞、操作系统洞、数据库漏洞、中间件漏洞等。 “渗透测试”作为主动防御的一种关键手段,对评估网络系统安全防护及措施至关重要,因为只有发现问题才能及时终止并预防潜在的安全风险。 根据网络安…

【Qt开发】No matching signal for on_toolButton_clicked() 解决方案

【Qt开发】No matching signal for on_toolButton_clicked() 解决方案 文章目录 No matching signal for xxx 解决方案附录:C语言到C的入门知识点(主要适用于C语言精通到Qt的C开发入门)C语言与C的不同C中写C语言代码C语言到C的知识点Qt开发中…

Linux安装青龙面板并将本地服务映射至公网实现远程访问

文章目录 前言一、前期准备本教程环境为:Centos7,可以跑Docker的系统都可以使用。本教程使用Docker部署青龙,如何安装Docker详见: 二、安装青龙面板三、映射本地部署的青龙面板至公网四、使用固定公网地址访问本地部署的青龙面板 …

全局异常 @ControllerAdvice 该怎么写

本文首发于稀土掘金:全局异常 ControllerAdvice 该怎么写,该账号即为本人账号,非搬运。 问题由来 很多小伙伴刚进公司做项目的时候,会看到项目里面有一个ControllerAdvice标记的类,整个类的编码结构大概是这样子&…

程序员极力推荐的几款插件

前言 h之前分享程序员喜欢的神器之后,还是相当多的伙伴喜欢,那一期的工具不仅是协助你工作还是工作外摸鱼划水,体验感是相当不错的。 这一期我还是打算把我非常喜欢用的几款插件分享给大家,这几款差劲不仅帮助我节省很多时间&am…

2024年软件系统与信息处理国际会议(ICSSIP 2024)即将召开!

2024年软件系统与信息处理国际会议(ICSSIP 2024)将于2024年10月25-27日在中国昆明举行。引领技术前沿,共谋创新未来。ICSSIP 2024将汇聚来自世界各地的专家学者,他们将在会上分享最新的研究成果、技术突破及实践经验。会议议题涵盖…

WAAP替代传统WAF已成趋势

数字化时代,Web应用和API已成为企业运营的核心。然而,随着网络攻击手段的不断进化,自动化攻击愈发频繁,传统的Web应用防火墙(WAF)已难以满足现代企业的安全需求。WAAP(Web Application and API …

我出一道面试题,看看你能拿 3k 还是 30k!

大家好,我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行 4 个简单的选择,就能判断出来你的水平是新手(3k)、初级(10k)、中…

大镜山阿里巴巴国际站数据采集软件使用方法|阿里国际站商家信息采集软件使用方法|阿里国际站信息采集软件使用方法

大镜山阿里巴巴国际站数据采集软件一款采集阿里巴巴国际站alibaba.com商家数据的软件,采集的数据包括店铺名称、店铺年份、评分、邮件地址、手机号码、网址及社交连接等。 下载大镜山阿里巴巴国际站数据采集软件 大镜山阿里巴巴国际站数据采集软件下载地址 大镜山…

ubuntu20.04.6 安装Skywalking 10.0.1

1.前置准备 1.1. **jdk17(Skywalking10 jdk22不兼容,用17版本即可)**安装: https://blog.csdn.net/CsethCRM/article/details/140768670 1.2. elasticsearch安装: https://blog.csdn.net/CsethCRM/article/details…

Java-21推崇的虚拟线程到底有好快?一起来看这个实验

我们一起来看下面这个场景:十万个待执行任务,每个任务休眠两秒 1. 采用java-21的虚拟线程池来实现 public static void main(String[] args) throws InterruptedException{ExecutorService VIRTUAL_THREAD_POOL Executors.newThreadPerTaskExecutor(Th…

爬虫程序在采集亚马逊站点数据时如何绕过验证码限制?

引言 在电商数据分析中,爬虫技术的应用日益广泛。通过爬虫技术,我们可以高效地获取大量的电商平台数据,这些数据对于市场分析、竞争情报、价格监控等有着极其重要的意义。亚马逊作为全球最大的电商平台之一,是数据采集的重要目标…

pdf文件损坏打不开怎么修复?文档损坏原因和修复办法分享!

pdf是一种优点很多的软件,它在文件传输过程中格式不会乱掉,而且还可以加密,特别的方便。pdf这种文件格式,不仅能呈现文档,还可以呈现图像,工作中经常会用到。 不过,因为种种原因,有…

【iOS】——Block底层实现和捕获机制

Block的实质 Block的定义是带有自动变量的匿名函数,下面从源码的角度探究下Block究竟是什么 下面是一个Block的简单实现: int main(int argc, const char * argv[]) {autoreleasepool {// insert code here...void (^blk)(void) ^{printf("Bloc…

WordPress原创插件:搜索引擎抓取首图seo图片

WordPress原创插件:搜索引擎抓取首图seo图片 插件设置 插件将在网站头部添加适当的meta标签,以便百度等搜索引擎抓取指定的固定图像。 插件下载 https://download.csdn.net/download/huayula/89596527

Docker容器数据库启动,如何用别名JAR jdbc:postgresql://别名:5432/postgres

如果想了解为啥这样做得同学,请去看这个文章 Docker容器网络(七)_host.docker.internal-CSDN博客 因为docker0网络,需要用别名的话,还得在host文件加 dockerIp(172.0.0.2) 别名 怎么查, docker network …

C语言:扫雷游戏实现

一、扫雷游戏的分析和设计 扫雷游戏想必大家都玩过吧,初级的玩法是在一个9*9的棋盘上找到没有雷的格子,而今天我们就要做的就是9*9扫雷游戏的实现。 1、游戏功能和规则 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘…

嵌入式学习第11天——C语言选择结构

2024年7月29日 第11天 选择&#xff08;分支&#xff09;结构 分支结构&#xff1a;又被称为选择结构 概念 选择结构&#xff1a;根据条件成立与否&#xff0c;选择相应的操作。 条件构建 关系表达式&#xff1a;含有关系运算符的表达式&#xff08;>,<,>,<,!…

贪心系列专题篇三

目录 单调递增的数字 坏了的计算器 合并区间 无重叠区间 用最少数量的箭 声明&#xff1a;接下来主要使用贪心法来解决问题&#xff01;&#xff01;&#xff01; 单调递增的数字 题目 思路 如果我们遍历整个数组&#xff0c;然后对每个数k从[k,0]依次遍历寻找“单调递…