地球是一颗持续活动的行星,其内部蕴藏的巨大能量通过地壳运动不断释放与重新分配。理解这些能量释放的时空规律,不仅是地质学的核心命题,也是人类与自然环境对话的基础方式。每一次地壳振动都记录着行星演化的信息——它们何时发生、强度几何、深度何处、集中在哪些区域——这些维度共同构成了一幅动态的地球脉动图谱。

将这些分散的、碎片化的地质事件信息汇聚起来,从中辨识模式、发现关联、预判趋势,是人类认知自然力的朴素追求。这种追求超越了特定技术或工具的范畴,它关乎我们如何看待自身在复杂自然系统中的位置,以及如何从看似杂乱的现象中提炼出可用于决策的知识。对地震活动的系统性感知与记录,本质上是对不确定性世界的一种理性回应。

实现地震数据的系统化查询与分析,遵循以下步骤:

第一步:划定时间窗口。 任何地质活动的研究都应先确定考察的时间跨度。起止时间的设定决定了数据集的规模和分析的粒度。时间跨度过短可能遗漏关键事件,过长则数据量膨胀、信噪比降低。合理的策略是根据研究目标来选择:短期监测关注最近数周,趋势分析则可跨越数年。

第二步:设定震级阈值。 震级是衡量地震能量释放的核心指标。下限阈值用于过滤掉无实际研究意义的微震事件,上限阈值则用于聚焦特定能量范围。上下限的组合使用能够精准锁定目标强度区间,避免无效数据干扰后续分析。

第三步:可选的地理空间约束。 当研究聚焦于特定区域时,通过中心点坐标加搜索半径的方式划定圆形地理范围,确保只检索该区域内的事件。经纬度需分别遵循其数值范围约束(纬度 -90 至 90,经度 -180 至 180),半径值则直接决定空间覆盖的广度。

第四步:发起数据检索并校验结果。 将前几步确定的参数组合为查询条件,向数据源发起请求。返回的数据包含每个地震事件的震级、位置、深度、时间、类型等核心属性。需校验返回数据是否为空、参数是否合法、网络通信是否正常。

第五步:多维度统计与可视化。 对检索结果进行聚合分析,统计总数、极值、均值等宏观指标;通过散点图观察事件在时间轴上的分布趋势,通过柱状图了解不同震级区间的数量分布,通过深度-时间图分析震源深度的变化规律。

第六步:数据导出与存档。 将完整的查询结果以结构化格式导出,便于离线分析、报告归档或与其他系统对接。

设计原则

  • 渐进过滤:从宽泛的时间范围开始,逐步收紧震级和空间条件,避免一次性过度约束导致零结果。
  • 可复现性:每次查询的参数组合应清晰可追溯,确保分析结果可被反复验证。
  • 用户可控性:所有筛选维度由用户主动设定,而非系统预设,以适应多样化的研究场景。

本工具涉及三个核心 npm 技术包,均在实际 TypeScript 文件中直接使用。


1. echarts

  • 用途:数据可视化图表库,用于生成散点图、柱状图等统计图表。
  • 官网:https://echarts.apache.org/
  • npm:https://www.npmjs.com/package/echarts
  • 版本:^6.0.0

在本项目中,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 的完整转换
}

2. @vuepic/vue-datepicker

  • 用途:日期选择器组件,提供日历式日期范围选择交互。
  • GitHub:https://github.com/Vuepic/vue-datepicker
  • npm:https://www.npmjs.com/package/@vuepic/vue-datepicker
  • 版本:^13.0.0

在本项目中用于起始日期和结束日期的选择,配置了中文界面(通过 date-fnszhCN 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"

3. date-fns

  • 用途:现代 JavaScript 日期工具库,本项目中仅使用了其国际化(locale)模块来提供中文日期界面。
  • 官网:https://date-fns.org/
  • npm:https://www.npmjs.com/package/date-fns

仅使用了一行导入,为日期选择器提供中文本地化支持:

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 文件。点击"清除结果"可清空当前数据。


输入约束

  • 起始日期必须小于或等于结束日期。
  • 日期最早为 1900-01-01,最晚为当天。
  • 最小震级不能大于最大震级。
  • 经纬度输入时,纬度必须在 -90 至 90 之间,经度必须在 -180 至 180 之间。
  • 地理位置筛选(经纬度 + 半径)需三个参数同时提供才生效;部分填写不会触发空间过滤。
  • 单次查询最多返回 2000 条记录,超出部分将被截断。

注意事项

  1. 时间跨度不宜过大。 如果时间范围设置过长(如超过一年),可能因数据量极大而导致查询响应缓慢,甚至触发 API 的频率限制。建议单次查询控制在 30 天以内以获得最佳响应速度。

  2. 震级下限不宜设得过低。 如果将最小震级设为"不限"或 0 级而时间范围又较宽,可能返回数千至上万条微震记录。过多数据不仅影响加载速度,也会使图表中的散点过度密集,降低可读性。

  3. USGS API 存在访问频率限制。 本工具的数据来自 USGS 公开 API,该服务对高频请求有速率限制。短时间内连续发起大量查询可能导致请求被拒绝。如果遇到查询失败,请稍等片刻后重试。

  4. 地理位置筛选需经纬度和半径同时填写。 只填写经纬度而不选半径,或只选半径而不填经纬度,系统不会附加空间过滤条件,查询结果将不限于该区域。请务必同时填写三项以启用位置筛选。

  5. 数据时延说明。 USGS 数据库对最新的地震事件存在一定的录入延迟(通常为几分钟到数小时不等)。如果您查询的时间范围包含了最近几小时内的时间段,可能暂时看不到刚刚发生的地震事件。历史数据(数天前及更早)通常是完整且稳定的。

中国各省访问量分布图

鼠标悬停查看各省份的访问数据统计

用户评论

所有评论均为匿名发布

1 浏览0 条评论
dRUw
暂无评论,来说两句吧