地球是一颗持续活动的行星,其内部蕴藏的巨大能量通过地壳运动不断释放与重新分配。理解这些能量释放的时空规律,不仅是地质学的核心命题,也是人类与自然环境对话的基础方式。每一次地壳振动都记录着行星演化的信息——它们何时发生、强度几何、深度何处、集中在哪些区域——这些维度共同构成了一幅动态的地球脉动图谱。
将这些分散的、碎片化的地质事件信息汇聚起来,从中辨识模式、发现关联、预判趋势,是人类认知自然力的朴素追求。这种追求超越了特定技术或工具的范畴,它关乎我们如何看待自身在复杂自然系统中的位置,以及如何从看似杂乱的现象中提炼出可用于决策的知识。对地震活动的系统性感知与记录,本质上是对不确定性世界的一种理性回应。
实现地震数据的系统化查询与分析,遵循以下步骤:
第一步:划定时间窗口。 任何地质活动的研究都应先确定考察的时间跨度。起止时间的设定决定了数据集的规模和分析的粒度。时间跨度过短可能遗漏关键事件,过长则数据量膨胀、信噪比降低。合理的策略是根据研究目标来选择:短期监测关注最近数周,趋势分析则可跨越数年。
第二步:设定震级阈值。 震级是衡量地震能量释放的核心指标。下限阈值用于过滤掉无实际研究意义的微震事件,上限阈值则用于聚焦特定能量范围。上下限的组合使用能够精准锁定目标强度区间,避免无效数据干扰后续分析。
第三步:可选的地理空间约束。 当研究聚焦于特定区域时,通过中心点坐标加搜索半径的方式划定圆形地理范围,确保只检索该区域内的事件。经纬度需分别遵循其数值范围约束(纬度 -90 至 90,经度 -180 至 180),半径值则直接决定空间覆盖的广度。
第四步:发起数据检索并校验结果。 将前几步确定的参数组合为查询条件,向数据源发起请求。返回的数据包含每个地震事件的震级、位置、深度、时间、类型等核心属性。需校验返回数据是否为空、参数是否合法、网络通信是否正常。
第五步:多维度统计与可视化。 对检索结果进行聚合分析,统计总数、极值、均值等宏观指标;通过散点图观察事件在时间轴上的分布趋势,通过柱状图了解不同震级区间的数量分布,通过深度-时间图分析震源深度的变化规律。
第六步:数据导出与存档。 将完整的查询结果以结构化格式导出,便于离线分析、报告归档或与其他系统对接。
本工具涉及三个核心 npm 技术包,均在实际 TypeScript 文件中直接使用。
在本项目中,echarts 负责三类图表的渲染:震级-时间散点图、震级分布柱状图、震源深度散点图。以下是图表生成的核心类型定义与实际代码片段:
import type { EChartsOption } from 'echarts'
import * as echarts from 'echarts'
export type ChartType = 'magnitudeTime' | 'magnitudeDist' | 'depth'
export const chartConfigs: Record<
ChartType,
{ title: string; generator: typeof generateMagnitudeTimeChart }
> = {
magnitudeTime: { title: '震级时间分布', generator: generateMagnitudeTimeChart },
magnitudeDist: { title: '震级分布统计', generator: generateMagnitudeDistributionChart },
depth: { title: '震源深度分布', generator: generateDepthChart },
}
震级-时间分布图使用散点序列(type: 'scatter'),气泡大小与震级正相关(symbolSize: (data) => Math.max(10, data.mag * 5)),纵轴范围固定为 0 到 10 级。震级分布统计图使用柱状序列(type: 'bar'),以 8 个震级区间(0-2、2-3、3-4、4-5、5-6、6-7、7-8、8+)对数据进行分箱计数,每根柱子使用渐变色填充:
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: colors[index!]! },
{ offset: 1, color: colors[index!]! + '80' },
]),
}
震源深度图使用散点序列并将纵轴反转(inverse: true),以符合"深度向下增大"的直觉。所有图表均通过解析图表主题色彩变量实现明暗主题的自适应——将 CSS 变量中的 OKLCH 颜色值转换为十六进制色码后注入图表配置:
export function oklchToHex(color: string): string {
const parts = parseOklch(color)
if (!parts) return color
const { L, C, H } = parts
const hRad = (H * Math.PI) / 180
const a = C * Math.cos(hRad)
const b = C * Math.sin(hRad)
// ... OKLab 到线性 sRGB 再到 gamma 校正 sRGB 的完整转换
}
在本项目中用于起始日期和结束日期的选择,配置了中文界面(通过 date-fns 的 zhCN locale)、年份优先选择模式、以及起始/结束日期之间的联动校验(起始日期不可晚于结束日期,结束日期不可早于起始日期)。核心调用方式:
import { VueDatePicker } from '@vuepic/vue-datepicker'
import { zhCN } from 'date-fns/locale'
// 组件中使用的关键配置:
// model-type="yyyy-MM-dd"
// :locale="zhCN"
// :min-date="minDate" // 最早可追溯到 1900-01-01
// :max-date="today" // 最晚为当天
// :year-first="true"
// :clearable="false"
仅使用了一行导入,为日期选择器提供中文本地化支持:
import { zhCN } from 'date-fns/locale'
用户设定参数(时间/震级/坐标/半径)
→ 构建 URLSearchParams 查询字符串
→ fetch() 请求 USGS FDSN Event API(GeoJSON 格式)
→ 返回 EarthquakeApiResponse(含 features 数组)
→ 统计计算(总数、最大震级、平均震级、最深深度)
→ echarts 图表渲染(散点图 / 柱状图)
→ JSON 数据导出(Blob + URL.createObjectURL 下载)
查询全球历史地震数据,支持按时间范围、震级范围和地理位置筛选
本工具用于查询全球历史地震数据,数据来源于美国地质调查局(USGS)的公开地震数据库,覆盖时间范围从 1900 年至今。您可以通过设定时间范围、震级区间和地理位置来精确筛选目标地震事件,查询结果以统计概览、可视化图表和明细列表三种形式呈现,并支持导出为 JSON 文件。
| 参数 | 类型 | 说明 |
|---|---|---|
| 起始日期 | 日期选择器 | 查询的起始日期,最早为 1900-01-01 |
| 结束日期 | 日期选择器 | 查询的结束日期,最晚为当天 |
| 最小震级 | 下拉选择 | 可选 0-8 级及以上,或"不限" |
| 最大震级 | 下拉选择 | 可选 1 级及以下至 8 级及以下,或"不限" |
| 经度 | 数字输入 | 范围 -180 至 180,可选 |
| 纬度 | 数字输入 | 范围 -90 至 90,可选 |
| 搜索半径 | 下拉选择 | 50 / 100 / 200 / 500 / 1000 / 2000 / 5000 公里 |
步骤 1:设定时间范围。 使用日期选择器分别选择起始日期和结束日期。起始日期不可晚于结束日期,否则会显示错误提示且查询按钮不可用。默认起始日期为当前日期前 30 天。
步骤 2:设定震级范围。 从下拉列表中选择最小震级和最大震级。最小震级用于过滤低震级事件,最大震级用于限定上限。两者均可不设限,此时返回所有震级的事件。
步骤 3:可选的地理位置筛选。 如需聚焦特定区域,输入中心点的经纬度并选择搜索半径。经纬度和半径必须同时填写才生效;如果仅填写经纬度而不选半径,或仅选半径而不填经纬度,系统不会启用空间过滤。
步骤 4:执行查询并查看结果。 点击"查询地震数据"按钮。查询成功后,页面展示三部分内容:数据概览(地震总数、最大震级、平均震级、最深深度)、可视化图表(可在震级时间分布、震级分布统计、震源深度分布之间切换)、地震列表(按震级降序排列,显示前 10 条,每条包含震级、地点、经纬度、时间、深度、类型,并提供 USGS 详情链接)。点击"下载 JSON"可将结果导出为 JSON 文件。点击"清除结果"可清空当前数据。
时间跨度不宜过大。 如果时间范围设置过长(如超过一年),可能因数据量极大而导致查询响应缓慢,甚至触发 API 的频率限制。建议单次查询控制在 30 天以内以获得最佳响应速度。
震级下限不宜设得过低。 如果将最小震级设为"不限"或 0 级而时间范围又较宽,可能返回数千至上万条微震记录。过多数据不仅影响加载速度,也会使图表中的散点过度密集,降低可读性。
USGS API 存在访问频率限制。 本工具的数据来自 USGS 公开 API,该服务对高频请求有速率限制。短时间内连续发起大量查询可能导致请求被拒绝。如果遇到查询失败,请稍等片刻后重试。
地理位置筛选需经纬度和半径同时填写。 只填写经纬度而不选半径,或只选半径而不填经纬度,系统不会附加空间过滤条件,查询结果将不限于该区域。请务必同时填写三项以启用位置筛选。
数据时延说明。 USGS 数据库对最新的地震事件存在一定的录入延迟(通常为几分钟到数小时不等)。如果您查询的时间范围包含了最近几小时内的时间段,可能暂时看不到刚刚发生的地震事件。历史数据(数天前及更早)通常是完整且稳定的。
鼠标悬停查看各省份的访问数据统计
所有评论均为匿名发布