基于SpringBoot和HeatMap的全球地震热力图可视化实践

news2024/9/28 18:20:12

目录

前言

一、关于热力图

1、HeatMap简介

2、属性和方法介绍

二、全球地震热力图反演

1、地震信息查询开发

 2、前端地图开发

三、地震带反演成果

1、三大地震带反演

2、地震区域分析

总结


前言

        众所周知,全球的地震带主要可以分为三处地震带——环太平洋地震带、欧亚地震带、海岭地震带。地震带基本上在板块交界处。第一个是环太平洋地震带:分布最广、地震最多。其释放的地震能量约占全球地震能量的80%。环太平洋地震带主要影响我国台湾和福建等东部地区。第二个是欧亚地震带(地中海——喜马拉雅山地震带)主要分布于亚欧大陆,也称为“横贯亚欧大陆南部、非洲西北部地震带”。欧亚地震从印度尼西亚开始,经中南半岛西部和中国的云、贵、川、青、藏地区,以及印度、巴基斯坦、尼泊尔、阿富汗、伊朗、土耳其到地中海北岸,一直延伸到大西洋的亚速尔群岛,发生在这里的地震占全球地震的15%左右。青藏高原地震带属于欧亚大陆地震带中一段。相对环太平洋地震带而言,青藏高原地震带是印度板块与青藏地块的正面碰撞,且印度板块运动速率相对较快,因而对我国大陆地区北东向挤压推移作用可能相对更强,对中国的影响也更大。
第三个是海岭/海脊/大洋中脊地震带,海岭地震带分布在太平洋、大西洋、印度洋中的海岭地区即海底山脉,对陆地影响较小。有一分支穿入红海和著名的东非裂谷区。

        与地震带相对应的是地震震级与其破坏力的关系,地震的等级是用来表示地震的强度和规模的一个指标,通常有两种方法来衡量,一种是震级,一种是烈度。震级是根据地震波的振幅和周期来计算的,反映了地震发生时震源处释放的能量大小。烈度是根据地震对人类活动和自然环境造成的影响程度来评定的,反映了地震在不同地区的破坏程度。

        一般来说,对于我国大部分地区,超过5级的地震就可能造成一定程度的破坏,超过6级的地震就可能造成较大的损失,超过7级的地震就可能造成重大的灾害。我国目前使用的震级标准,是国际上通用的里氏分级表,共分9个等级。通常把小于2.5级的地震叫小地震,2.5-4.7级地震叫有感地震,大于4.7级地震称为破坏性地震。

        本文将结合中国地震台网数据集,使用HeatMap热力图插件做可视化,后端使用SpringBoot框架进行业务逻辑开发组件。以热力图的方式对全球三大地震带的活动与范围进行反演,文中的场景仅限将4.7级以上的破坏性地震进行热力图展示。本文可以作为学习热力图可视化的教程,同时对于使用gis来分析我们的生活环境也是一个非常好的实践机会。对这些方面感兴趣的朋友可以对本文指正一番。

一、关于热力图

        可能还有一些朋友对热力图不太了解。首先花一些时间对热力图进行一个简单的介绍。热力图(Heatmap)是一种用颜色表达数据密度的可视化工具。将数据以不同颜色的热点形式呈现在空间中,用于展示数据的分布情况和集中程度,帮助我们观察数据的趋势和模式。热力图不仅能帮助您展示数据的分布情况和集中程度,还能助您观察数据的趋势和模式。

        在气象和地理信息领域:热力图可用于展示气温分布、地震热点、人口密度等地理和气象数据,以便更好地理解区域特征和趋势。 这里的地震信息就是一个非常好的应用场景。

1、HeatMap简介

        热力图的可视化主要是采用HeatMap.js组件。它的官网地址为:heatmap.js。

        从它的官网相关介绍及标签可以看到,它是一个html5的渲染组件。同时是支持诸如OpenLayers或者Leaflet这样的地图组件的。 将其下载到本地后,可以看到它的源码和相关实例目录如下所示:

2、属性和方法介绍

        在HeatMap组件当中,有一个非常重要的配置属性会用得到。这个配置属性就是cfg对象。首先来看官方的例子:

// create configuration object
var config = {
  container: document.getElementById('heatmapContainer'),
  radius: 10,
  maxOpacity: .5,
  minOpacity: 0,
  blur: .75
};
序号参数值及示例
1container绑定容器,在地图应用中不常用
2backgroundColor 背景颜色,可以使用hexcode或者rgb或者颜色名
3radius 数据点半径
4opacity透明度
5maxOpacity最大透明度
6minOpacity最小透明度
7latField维度字段
8lngField经度字段
9valueField值域字段

         热力图对象的方法不少,这里具体介绍一个设置数据的方法。主要是因为可能会需要从后台通过ajax的形式返回数据,供前台调用,因此介绍一下数据设置的方法。

        heatmapInstance.setData(object)。官方介绍:Initializes a heatmap instance with a dataset. "min""max", and "data" properties are required.setData removes all previously existing points from the heatmap instance and re-initializes the datastore.大致的意思就是给一个热力图对象进行赋值,在这个方法中,min,max,data是必须要的。调用方法如下:

var data = {
  max: 100,
  min: 0,
  data: [
    dataPoint, dataPoint, dataPoint, dataPoint
  ]
};
heatmapInstance.setData(data);

         在掌握了以上知识之后,我们来进行本博客的实际案例的开发,结合上面的HeatMap组件,请求后台的Java接口进行动态热力图的功能开发。

二、全球地震热力图反演

        本节将通过实战的方式将全球4.7级以上的地震信息进行热力图展示,这里采用的方式是直接震级当做热力图的热力值。以此来表明其影响的大小,通过分布在全球的热力图,来看一下全球的地震带分布情况,是否与我们的常识吻合。

1、地震信息查询开发

        为了将全球4.7级及以上的地震信息查询出来,我们需要借助sql来执行。在Service层中定义以下的业务查询逻辑。

package com.yelang.project.extend.earthquake.domain;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yelang.framework.aspectj.lang.annotation.Excel;
import com.yelang.framework.web.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@TableName(value ="biz_earthquake_info",autoResultMap = true)
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class EarthquakeInfo extends BaseEntity{
	private static final long serialVersionUID = 8595357343827108241L;
    @TableId
    @Excel(name = "序号")
    private Long id;//主键
    @Excel(name = "发震时刻",dateFormat="yyyy-MM-dd HH:mm:ss")
    @TableField(value="eq_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date eqTime;//发震时间
    @Excel(name = "经度")
    @TableField(value="eq_lng")
    private String eqLng;
    @Excel(name = "纬度")
    @TableField(value="eq_lat")
    private String eqLat;
    @Excel(name = "震源深度(千米)")
    @TableField(value="eq_depth")
    private String eqDepth;
    @Excel(name = "震级(M)")
    @TableField(value="eq_level")
    private String eqLevel;
    @Excel(name = "eqLocation")
    @TableField(value="eq_location")
    private String eqLocation;
}
@Override
public List<EarthquakeInfo> selectList4HeatMap() {
	QueryWrapper<EarthquakeInfo> queryWrapper = new QueryWrapper<EarthquakeInfo>();
	queryWrapper.gt("eq_level ::numeric", 4.7);
	queryWrapper.orderByDesc("eq_time");
	return earthQuakeInfoMapper.selectList(queryWrapper);
}

 在控制层中,controller新增一个查询4.7级以上地震信息的接口,关键代码如下:

/**
  * 地震信息列表
  * @param earthquakeInfo 地震信息
  * @return
*/
@PostMapping("/data")
@ResponseBody
public AjaxResult earthinfo(){
     List<EarthquakeInfo> list = earthquakeInfoService.selectList4HeatMap();
     AjaxResult ar = AjaxResult.success();
     ar.put("data", list);
     return ar;
}

        为了方便大家了解相关的数据结构,这里将示例数据返回贴一部分,方便大家对数据结构有所了解。 

createTime: "2023-12-05 21:36:38"
eqDepth: "30"
eqLat: "9.20"
eqLevel: "5.8"
eqLng: "126.85"
eqLocation: "菲律宾棉兰老岛附近海域"
eqTime: "2023-12-05 21:36:38"
id: "3"
params: {}
updateTime: "2023-12-05 21:36:38"

 2、前端地图开发

        将后台相关逻辑开发好之后,下面进行前端页面的开发。首先我们需要引入heatmap的相关插件及样式。在html代码当中引入以下javascript组件。

<!-- heatmap.js add by wuzuhu -->
<script th:src="@{/js/plugins/heatmap/heatmap.js}"></script>
<!-- heatmap.js add by wuzuhu -->
<script th:src="@{/js/plugins/heatmap/leaflet-heatmap.js}"></script>

         然后定义热力图配置,需要根据实际的情况进行配置,这里跟后台的javaBean中的属性对应上,否则可能没办法展示效果。

// 热力图配置
var cfg = {
   "radius": 20,
   "maxOpacity": .7,
   "scaleRadius": false,
   "useLocalExtrema": true,
    latField: 'eqLat',
    lngField: 'eqLng',
    valueField: 'eqLevel'
};

        关于如何在Leaflet定义地图及设置瓦片底层,不再赘述。可以查看其它的相关文章。将配置信息定义完成之后,可以进行热力图的初始化工作。

 function initHeatMap(){
	  var heatmaplayer = new HeatmapOverlay(this.cfg); // 实例化热力图对象,this.cfg为热力图配置的参数
	  heatmaplayer.addTo(mymap);
	  $.ajax({
	      type: "post",
	      url: prefix + "/data",
	      data: {},
	      success: function(rsData) {
    			var testData = {
                   max: 10,
                   data: rsData.data
                  };
    			heatmaplayer.setData(testData);
	       }
	   });
   }

三、地震带反演成果

        在开发完后端程序和前端的展示界面之后,我们来看一下全球4.7级以上地震的热力图统计情况,也再来看一下世界三大地震带的位置是否正确。

1、三大地震带反演

上述是以上全球的地震带热力统计图。

喜马拉雅山系和太平洋的地震热力分布图

 我国地震带大致分布

太平洋地震热力图 

2、地震区域分析

        通过以上三张热力图其实可以很明显看到非常红色耀眼的三条地震带,其大概的位置分布与互联网上的介绍没有什么区别,与世界三条地震带的分布范围基本拟合。中国位于喜马拉雅地震带和换台平台地震带的位置上,其在板块的交接上,地震活动比较频繁。

总结

        以上就是本文的主要内容,本文将结合中国地震台网数据集,使用HeatMap热力图插件做可视化,后端使用SpringBoot框架进行业务逻辑开发组件。以热力图的方式对全球三大地震带的活动与范围进行反演,文中的场景仅限将4.7级以上的破坏性地震进行热力图展示。本文可以作为学习热力图可视化的教程,同时对于使用gis来分析我们的生活环境也是一个非常好的实践机会。

        行文仓促,难免有不足,如有不足之处,还请各位朋友批评指正,不胜感激。

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

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

相关文章

利用API打造卓越的用户体验

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 1. 数据驱动的设计 2. 功能扩展与整合 3. 实时性与响应性 4. 个性化推荐与定制化服务 结语 我的其他博客 正文 随着数字化时代的…

我的电脑win11系统安装了谷歌浏览器,桌面的快捷方式打不开

安装好浏览器以后双击打不开右键打开文件位置也弹窗报错提示 但是我发现开始栏里面可以打开 说明我的软件应该是没有问题的&#xff0c;研究了一下 我实际的安装目录在&#xff1a;C:\Program Files\Google\Chrome\Application 桌面的快捷方式右键查看属性显示的地址却不对&a…

js生成笛卡尔集合

let arr[[黑, 金, 白],[16G, 32G],[电信, 移动, 联通], ]let listarr.reduce((a, b) > { return a.flatMap(x > b.map(y > [...x, y]))}, [[]] )console.log(list)生成结果

easyExcel大数据量导出oom

easyExcel大数据量导出 异常信息 com.alibaba.excel.exception.ExcelGenerateException: java.lang.OutOfMemoryError: GC overhead limit exceededat com.alibaba.excel.write.ExcelBuilderImpl.fill(ExcelBuilderImpl.java:84)at com.alibaba.excel.ExcelWriter.fill(Excel…

(MATLAB)第二十一章 Simulink仿真设计初步

Simulink是MATLAB的重要组成部分&#xff0c;可以非常容易地实现可视化建模&#xff0c;并把理论研究和工程实践有机地结合在一起&#xff0c;不需要书写大量程序&#xff0c;只需要使用鼠标和键盘对已有模块进行简单的操作和设置。 21.1 Simulink简介 Simulink是MATLAB软件的…

汽车ECU的虚拟化技术(五) -- 对MCU虚拟化实现难点的思考

目录 1.概述 2.虚拟化软件的难点 2.1 虚拟化中的中断处理 2.2 虚拟ECU的通信 3.小结 1.概述 在上面文章里汽车ECU的虚拟化技术(四) -- 对MCU虚拟化实现难点的思考-CSDN博客&#xff0c;解了OEM面临新的电子电气架构下的集成难点&#xff0c;引入了hypervisor以及VM调度机制…

内网使用rustdesk进行远程协助

文章目录 前言一、搭建rustdesk中继服务器二、搭建文件下载服务器三、创建引导脚本四、使用 前言 内网没有互联网环境&#xff0c;没法使用互联网上有中继服务器的远程协助工具&#xff0c;如teamviewer、todesk、向日癸等&#xff1b;在内网进行远程维护可以自己搭建中继服务…

缤纷浏览器 —— 一键换肤,个性随心换(H5实现浏览器换肤效果)

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

新版仿蓝奏网盘|城通网盘|百度网盘|闪客网盘|网盘源码系统,个人网盘系统

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买!购买本专栏住如有什么源码需要,可向博主私信,第二天即可发布!博主有几万资源) 这是一款仿蓝奏网盘、城通网盘、百…

BGP4+简介

定义 BGP是一种用于自治系统AS&#xff08;Autonomous System&#xff09;之间的动态路由协议&#xff0c;常用版本是BGP-4&#xff0c;BGP-4只能传递IPv4路由。针对IPv6的BGP4扩展&#xff0c;通常称为BGP4。 目的 BGP4用于在AS之间传递路由信息&#xff0c;并不是所有情况…

自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】

大家好&#xff0c;我是淘小白~ 首先&#xff0c;感谢大家的支持~~ ChatGPT采集洗稿软件V5.9版本更新&#xff0c;此次版本更新修改增加了一些内容&#xff1a; 1、自定义多条指令&#xff0c;软件自动判断指令条数&#xff0c;进行输入 2、增加谷歌浏览多账号轮询&#xf…

Orbit 使用指南 07 | 创建强化学习环境 | Isaac Sim | Omniverse |

如是我闻 在谈论了如何创建基础环境后&#xff0c;我们现在将探索如何为强化学习创建任务环境。 基础环境被设计为一个感知-行动环境&#xff08;sense-act environment&#xff09;&#xff0c;代理&#xff08;agent&#xff09;可以向环境发送命令并从环境接收观测。这种最…

Meta 推出SceneScript,一种全新的3D场景重建方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

高项-案例分析练习(范围管理)

案例一 公司在2014年初承接了一个医疗信息系统项目&#xff0c;要求2014年底完成该项目研发任务并进行试运行&#xff0c;2015年负责项目全年的运行维护&#xff0c;运行稳定后甲方验收合格项目才能结束。由于张工具有多年的医疗系统开发管理经验&#xff0c;公司领导任命他为项…

用BSP优化3D渲染

3D渲染引擎设计者面临的最大问题之一是可见性计算&#xff1a;只必须绘制可见的墙壁和物体&#xff0c;并且必须以正确的顺序绘制它们&#xff08;应该在远处的墙壁前面绘制近墙&#xff09; 。 更重要的是&#xff0c;对于游戏等应用程序来说&#xff0c;开发能够快速渲染场景…

Flutter动画(一)Ticker、Animate 原理

在任何系统的UI框架中&#xff0c;动画原理都是类似的&#xff0c;即&#xff1a;在一段时间内&#xff0c;快速地多次改变UI外观&#xff1b;由于人眼会产生视觉暂留&#xff0c;所以最终看到的就是一个“连续”的动画。 Flutter中对动画进行了抽象&#xff0c;主要涉及 Anim…

2.6、媒体查询(mediaquery)

概述 媒体查询作为响应式设计的核心,在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景: 针对设备和应用的属性信息(比如显示区域、深浅色、分辨率),设计出相匹配的布局。当屏幕发生动态改变时(比如分屏…

2016年认证杯SPSSPRO杯数学建模B题(第二阶段)多帧图像的复原与融合全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 B题 多帧图像的复原与融合 原题再现&#xff1a; 数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制&#xff0c;拍摄设备只能在较低的分辨率下成像。为简单起见&#xff0c;我们只考虑单色成像。假设成像的分辨率为 32 64&#x…

QT作业。。

1.使用手动连接&#xff0c;将登录框中的取消按钮使用t4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数将登录按钮使用t5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;密码是否为&q…

(done) 机器学习中的方差 variance 和 偏差 bias 怎么理解?

来源&#xff1a;https://blog.csdn.net/weixin_41479678/article/details/116230631 情况1属于&#xff1a;低 bias&#xff0c;高 variance (和 human performance 相近&#xff0c;但和 验证集dev set 相远) 通常意味着模型训练轮数太多 情况2属于&#xff1a;高 bias&#…