目录

Forrestania重力反演系统

基于SimPEG的交互式重力勘探数据处理与3D密度模型反演Web应用。

Python SimPEG Streamlit


目录

  1. 项目简介
  2. 功能特性
  3. 系统要求
  4. 安装部署
  5. 快速开始
  6. 数据格式
  7. 参数说明
  8. 结果输出
  9. 应用界面
  10. 故障排除

项目简介

本系统针对澳大利亚Forrestania地区重力勘探数据,实现以下功能:

  • 重力测点数据的加载与质量验证
  • 3D计算网格的构建
  • 基于SimPEG的重力反演
  • 密度模型的多形式可视化

背景知识

重力勘探是一种地球物理勘探方法,通过测量地表重力加速度的微小变化,推断地下岩石密度分布。高密度体(如金属矿体)产生正重力异常,低密度体(如沉积盆地、洞穴)产生负重力异常。

反演目标:给定地表观测重力异常,反推地下密度三维分布。


功能特性

核心功能

功能 描述
数据上传 支持ZIP格式数据包,自动解析CSV重力数据
数据验证 自动检查数据完整性、范围、有效性
数据可视化 测点空间分布、重力异常直方图
网格构建 自定义单元尺寸的3D TensorMesh
反演计算 梯度下降优化算法
结果展示 2D切片图、3D交互模型、收敛曲线
结果导出 CSV格式密度模型、迭代历史

3D可视化

  • Plotly交互图: 支持旋转、缩放、平移
  • 等值面渲染: 高密度(红色)、低密度(蓝色)
  • 测点叠加: 显示重力测点空间位置

系统要求

硬件要求

  • CPU: 4核及以上
  • 内存: 8GB及以上(反演计算需要)
  • 显卡: 可选,支持WebGL加速3D渲染

软件要求

  • 操作系统: Windows 10+, macOS 10.14+, Linux (Ubuntu 18.04+)
  • Python: 3.12 或更高版本
  • 浏览器: Chrome 80+, Firefox 75+, Safari 14+, Edge 80+

安装部署

方式一:从头安装

# 1. 克隆或下载本项目
cd /path/to/simpeg_test

# 2. 创建Python虚拟环境
python -m venv simpeg_env

# 3. 激活虚拟环境
# Linux/macOS:
source simpeg_env/bin/activate
# Windows:
# simpeg_env\Scripts\activate

# 4. 安装依赖
pip install -r requirements.txt

# 5. 启动应用
streamlit run app.py

方式二:使用已有环境

如果已经配置过SimPEG环境:

# 激活现有环境
source simpeg_env/bin/activate

# 安装额外依赖
pip install streamlit plotly

# 启动应用
streamlit run app.py

验证安装

# 检查Python版本
python --version

# 检查关键包
python -c "import simpeg; import streamlit; import plotly; print('All OK!')"

快速开始

1. 准备数据

准备包含重力数据的ZIP文件(参考数据格式

2. 启动应用

streamlit run app.py

浏览器自动打开 http://localhost:8501

3. 上传数据

  • 点击侧边栏”上传重力数据ZIP文件”
  • 选择包含CSV的ZIP文件
  • 系统自动解析并验证数据

4. 调整参数

根据数据特点调整反演参数(参考参数说明

5. 执行反演

  1. 点击”创建网格”按钮
  2. 点击”🚀 开始反演”按钮
  3. 观察进度条和状态信息

6. 查看结果

  • 收敛曲线:判断反演是否收敛
  • 密度切片:查看X/Y/Z三向切片
  • 3D模型:交互式查看密度体

数据格式

ZIP文件结构

your_data.zip
├── data.csv          # 主数据文件(必需)
├── readme.txt       # 可选:说明文件
└── other_files/      # 可选:其他辅助文件

CSV数据格式

CSV文件必须包含以下四列:

列名 描述 单位 示例
X 东向坐标(MGA50) 米(m) 748151.81
Y 北向坐标(MGA50) 米(m) 6416320.50
Z 高程 米(m) 380.31
FGrav_mgal 重力异常 毫伽(mGal) 0.147

数据要求

  • 最少测点数: 10个
  • 坐标系统: 建议使用MGA50(UTM zone 50)
  • 异常类型: 布格重力异常或剩余重力异常
  • 异常单位: 毫伽(mGal),1 mGal = 10^-5 m/s²

示例数据

Forrestania示例数据预览:

X,Y,Z,FGrav_mgal
748151.81,6416320.50,380.31,0.147
748034.16,6416308.50,380.62,0.233
747994.06,6416313.00,380.57,0.284
747709.00,6416310.00,380.26,0.519
747416.75,6416310.00,375.74,0.359
...

参数说明

网格设置

参数 范围 默认值 说明
X方向单元尺寸 50-500m 200m 东西向网格分辨率
Y方向单元尺寸 50-500m 200m 南北向网格分辨率
Z方向单元尺寸 25-200m 100m 垂直向网格分辨率
边界扩展距离 100-1000m 500m 测区边界扩展量

选择建议:

  • 测点稀疏时:使用较大单元尺寸(300-500m)
  • 测点密集时:使用较小单元尺寸(50-150m)
  • 目标深度大时:Z方向可适当增大

反演设置

参数 范围 默认值 说明
最大迭代次数 5-100 20 优化算法最大迭代数
平滑因子 0.0001-0.01 0.001 模型平滑约束权重

高级设置

参数 范围 默认值 说明
步长(alpha) 0.00001-0.01 0.0001 梯度下降步长

参数调优建议:

  1. 反演不收敛(目标函数上升):

    • 减小步长(alpha)
    • 增加平滑因子
  2. 反演太慢:

    • 减少迭代次数
    • 增大网格单元尺寸
  3. 模型太粗糙:

    • 减小平滑因子
    • 增加迭代次数
  4. 模型太光滑(丢失细节):

    • 增加平滑因子
    • 减少迭代次数

结果输出

输出文件

1. 密度模型 (CSV)

包含每个网格单元的密度值:

density
0.001234
-0.002345
0.003456
...

2. 迭代历史 (CSV)

包含每次迭代的信息:

iteration,misfit,model_change
1,3.6632,0.022594
2,3.1893,0.019550
3,2.8284,0.017482
...

图像输出

图像 格式 说明
重力测点分布 PNG 空间分布+直方图
收敛曲线 PNG 目标函数/模型变化vs迭代
密度切片 PNG X/Y/Z三向切片图
3D密度模型 HTML/PNG Plotly交互图

密度单位

  • g/cc (克/立方厘米)
  • 正值:高密度体(矿体、基岩)
  • 负值:低密度体(沉积物、洞穴)

应用界面

主界面布局

┌─────────────────────────────────────────────────────────────┐
│                    🔬 Forrestania重力反演系统                 │
│              基于SimPEG的交互式重力勘探数据处理                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  📊 Step 1: 数据读取与验证                                  │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  ✅ 数据验证通过!                                     │   │
│  │  测点数量: 992                                       │   │
│  │  X范围: 744682.28 ~ 749356.50                       │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  📈 Step 2: 数据可视化                                      │
│  ┌─────────────────────────────────────────────────────┐   │
│  │           [测点分布图]        [直方图]              │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  🔲 Step 3: 构建3D计算网格        🔄 Step 4: 执行反演       │
│  ┌────────────────────────┐  ┌────────────────────────┐   │
│  │  [创建网格]            │  │   [🚀 开始反演]        │   │
│  │  网格单元: 7392        │  │   进度: ████████░░ 80% │   │
│  └────────────────────────┘  └────────────────────────┘   │
│                                                             │
│  📊 Step 5: 反演结果展示                                    │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  [收敛曲线]  [密度切片]  [3D交互模型]               │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

┌────────────────┐
│ 📁 数据与参数设置 │
│                │
│ [上传ZIP文件]   │
│                │
│ ⚙️ 网格设置     │
│  X尺寸: ───●── │
│  Y尺寸: ───●── │
│  Z尺寸: ───●── │
│                │
│ ⚙️ 反演设置     │
│  迭代: ───●──  │
│  平滑: ───●──  │
└────────────────┘

侧边栏控件

控件 类型 说明
上传重力数据 文件上传 接受ZIP格式
X/Y/Z方向单元尺寸 滑块 网格分辨率
边界扩展距离 滑块 扩展量
最大迭代次数 滑块 迭代上限
平滑因子 滑块 正则化权重
步长 数字输入 高级设置

故障排除

常见问题

1. 数据加载失败

症状: 上传ZIP后提示”数据加载失败”

可能原因:

  • ZIP内无CSV文件
  • CSV格式不正确
  • 列名不匹配

解决方法:

  • 检查ZIP文件内容
  • 确认CSV包含X, Y, Z, FGrav_mgal列
  • 参看数据格式示例

2. 数据验证失败

症状: 提示”数据验证失败”

可能原因:

  • 测点太少(<10个)
  • 坐标/重力值全部相同
  • 重力异常变化太小

解决方法:

  • 检查原始数据质量
  • 确认测点坐标有变化
  • 验证重力异常值有差异

3. 反演失败

症状: 点击开始反演后报错

可能原因:

  • 网格参数不合理
  • 内存不足
  • 计算超时

解决方法:

  • 增大网格单元尺寸
  • 减少迭代次数
  • 关闭其他占用内存的程序

4. 3D可视化不显示

症状: 3D模型区域空白

可能原因:

  • 浏览器不支持WebGL
  • 模型全为0值
  • 网络问题

解决方法:

  • 更换Chrome/Firefox浏览器
  • 检查反演结果是否有效
  • 刷新页面重试

5. 进度条卡住

症状: 反演开始后进度不动

可能原因:

  • 计算量过大
  • 系统资源不足

解决方法:

  • 等待更长时间
  • 减小网格/迭代参数
  • 强制刷新页面后重试

错误代码

错误 含义 处理方式
ValueError: ZIP中未找到CSV ZIP格式错误 检查ZIP内容
ValueError: 数据缺少必要列 CSV列名错误 修正列名
RuntimeError: 反演失败 计算错误 调整参数重试
MemoryError 内存不足 减小网格规模

获取帮助

# 查看Python版本
python --version

# 检查包版本
pip list | grep -E "simpeg|streamlit|plotly"

# 查看日志
# Streamlit会在终端输出详细错误信息

技术架构

依赖关系

app.py (Streamlit)
├── simpeg (地球物理反演)
│   ├── discretize (网格)
│   ├── pymatsolver (线性代数)
│   └── geoana (解析计算)
├── streamlit (Web框架)
├── plotly (3D可视化)
├── pandas (数据处理)
└── matplotlib (2D绘图)

核心算法

  1. 正演: 积分公式计算重力场
  2. 敏感度矩阵: Jacobian矩阵计算
  3. 反演: 梯度下降优化
  4. 正则化: Tikhonov平滑约束

版本历史

版本 日期 更新内容
1.0.0 2026-05-11 初始版本,包含核心反演功能

许可协议

本项目基于SimPEG开源协议。


联系方式

如有问题或建议,请联系开发团队。


最后更新: 2026-05-11

关于
5.5 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号