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

目录

前言

一、关于热力图

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.mfbz.cn/a/479995.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

superset 二开增加 flink 数据源连接通过flink sql 查询数据

前言 superset 目前还不支持 flink 的数据源连接&#xff0c;目前我们公司在探索使用数据湖那一套东西&#xff1a; 使用 flink 作为计算引擎使用 paimon oss对象存储对接 flink 作为底层存储使用 superset 通过 flink gateway 查询 paimon 数据形成报表 增加flink数据源 …

Gavin Wood 精彩演讲|安全灵活 JAM 链,打造去中心化多核计算机

Polkadot 年度开发者大会 sub0 Asia 近期在泰国曼谷正式落幕。面对区块链行业的激烈竞争&#xff0c;Polkadot 创始人 Gavin Wood 在演讲中说明将如何利用 Polkadot 2.0 与 JAM 链带来新的技术创新&#xff0c;推动生态持续发展。 Polkadot 将推一个名为 JAM 链的新网络。JAM …

用傅里叶变换和反变换消除噪音信号干扰的软件实例

一、序言 场景一&#xff1a;噪音信号是数据采集处理的天敌&#xff0c;但无时无刻它都存在&#xff0c;于是&#xff0c;信号传输时进行屏蔽防护、模数转换时给予充分的采保时间、电路实现上低通带通处理&#xff0c;为了减小电解电容的感抗作用有时还附加上瓷片电容滤波&…

python的ITS 信息平台的设计与实现flask-django-nodejs-php

第二&#xff0c;陈列说明该系统实现所采用的架构、系统搭建采用的服务器、系统开发环境和使用的工具&#xff0c;以及系统后台采用的数据库。 最后&#xff0c;对系统进行全面测试&#xff0c;主要包括功能测试、查询性能测试、安全性能测试。 分析系统存在的不足以及将来改进…

深度学习pytorch——感知机(Perceptron)(持续更新)

什么是感知机&#xff1f; 感知机是由美国学者FrankRosenblatt在1957年提出来的。感知机是作为神经网络&#xff08;深度学习&#xff09;的起源的算法。因此&#xff0c;学习感知机的构造也就是学习通向神经网络和深度学习的一种重要思想。 感知机接收多个输入信号&#xff0c…

在服务器(Ubuntu20.04)安装用户级别的cuda11.8(以及仿照前面教程安装cuda11.3后安装cudnn和pytorch1.9.0)

1、cuda11.8的下载 首先在cuda官网下载我们需要的cuda版本&#xff0c;这里我下载的是cuda11.8&#xff08;我的最高支持cuda12.0&#xff09; 这里我直接使用wget命令下载不了&#xff0c;于是我直接在浏览器输入后面的链接下载到本地&#xff0c;之后再上传至服务器的&am…

如何使用人工智能和ChatGPT来优化营销转化率

人工智能 &#xff08;AI&#xff09; 和营销的交集正在彻底改变企业与客户互动的方式&#xff0c;最终改变营销转化率。人工智能能够分析大量数据、理解模式和自动执行任务&#xff0c;它不仅是一项创新技术&#xff0c;而且是营销领域的根本性转变。这种转变允许更加个性化、…

Loader和Plugin的区别?编写Loader,Plugin的思路。

一、区别 前面两节我们有提到Loader与Plugin对应的概念&#xff0c;先来回顾下 loader 是文件加载器&#xff0c;能够加载资源文件&#xff0c;并对这些文件进行一些处理&#xff0c;诸如编译、压缩等&#xff0c;最终一起打包到指定的文件中plugin 赋予了 webpack 各种灵活的…

Jupyter服务器端为R语言安装readr包

1.登录debian服务器 方式1.Windows10中可利用putty登录linux服务器 方式2.自从搭建了Jupyter服务器后&#xff0c;还可以从juypyter的终端来登录linux服务器 2.进入R语言命令行 3.安装readr包 >install.packages(‘readr’) …

四川宏博蓬达法律咨询有限公司:法律服务安全的新标杆

在这个法治社会&#xff0c;法律服务行业扮演着越来越重要的角色。四川宏博蓬达法律咨询有限公司&#xff0c;作为行业内的佼佼者&#xff0c;始终坚持以客户为中心&#xff0c;为客户提供专业、高效、安全的法律服务。 一、公司背景与实力展示 四川宏博蓬达法律咨询有限公司自…

python - 更改pdf中文本的字体高亮颜色(fitz模块)

import fitzdoc fitz.open(r"e:/test.pdf") pagedoc[0]# 按照指定的位置设置颜色 highlight page.add_highlight_annot((20, 500,60, 520)) highlight.set_colors(stroke[1, 1, 0]) # light red color (r, g, b) 颜色rgb每个除以255得出 highlight.update()# 按照…

docker 安装部署 jenkins

今天 小☀ 给大家普及一下什么是 jenkins&#xff01;&#xff01; Jenkins是一个开源软件项目&#xff0c;基于Java开发的持续集成工具。它提供了一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。Jenkins起源于Hudson&#xff0c;主要用于持续、自动地构建、…

面试笔记——MySQL(主从同步原理、分库分表)

主从同步原理 主从同步结构&#xff1a;主库负责写数据&#xff0c;从库负责读数据&#xff0c;如图—— MySQL主从复制的核心就是二进制日志&#xff08;BINLOG&#xff09;&#xff0c;它记录了所有的 DDL&#xff08;数据定义语言&#xff09;语句和 DML&#xff08;数据操…

Tkinter 一文读懂

Tkinter 简介 Tkinter&#xff08;即 tk interface&#xff0c;简称“Tk”&#xff09;本质上是对 Tcl/Tk 软件包的 Python 接口封装&#xff0c;它是 Python 官方推荐的 GUI 工具包&#xff0c;属于 Python 自带的标准库模块&#xff0c;当您安装好 Python 后&#xff0c;就可…

使用PDFBox调整PDF每页格式

目录 一、内容没有图片 二、内容有图片 maven依赖&#xff0c;这里使用的是pdfbox的2.0.30版本 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.30</version></dependency>…

从零开始学Spring Boot系列-集成Kafka

Kafka简介 Apache Kafka是一个开源的分布式流处理平台&#xff0c;由LinkedIn公司开发和维护&#xff0c;后来捐赠给了Apache软件基金会。Kafka主要用于构建实时数据管道和流应用。它类似于一个分布式、高吞吐量的发布-订阅消息系统&#xff0c;可以处理消费者网站的所有动作流…

【Linux】内核空间动态内存申请

&#x1f525;博客主页&#xff1a;PannLZ &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 文章目录 内核空间动态内存申请1.kmalloc()2._ _get_free_pages()3.vmalloc() 内核空间动态内存申请 1.kmalloc() #include <linux/slab.h>vo…

Flask项目中使用蓝湖实现启动项配置——多个controller项

项目结构 # controller1-__init__.py from flask import Blueprintcont2_sale_blueprint Blueprint(cont2_sale_blueprint, __name__) cont2_user_blueprint Blueprint(cont2_user_blueprint, __name__) from . import user_controller from . import sale_controller# contr…

推荐一款很不错的vscode高亮插件

用过很多款高亮插件&#xff0c;总感觉大部分显示都很乱&#xff0c;但是其中有一款用起来很清晰明了&#xff0c;很喜欢&#xff01; 插件名字&#xff1a;select-highlight-cochineal-color 使用效果&#xff1a; 底色高亮让人感觉很清晰&#xff0c;一个好的高亮插件能让你…

VScode通过ssh连接github

通过ssh连接github 1.生成公钥和私钥2.设置config文件3.配置ssh免密登录4.远程仓库初始化 1.生成公钥和私钥 首先选择一个文件夹&#xff0c;右击 git bash here&#xff0c;在命令行输入命令&#xff0c;按下三次回车生成一个**.ssh文件夹**&#xff0c;一般在用户的user根目…