mcpField
V
verde

verde

github.com/steadfastasart数据与数据库7366 次安装6 周前更新
代码仓库

关于 verde

Verde 是用于散点空间数据网格化的 Python 技能,面向地球科学家和数据分析人员。它结合多种网格算法、数据缩减、趋势处理、处理流水线与交叉验证。

主要功能

  1. 01样条、线性和三次网格化
  2. 02密集数据的分块缩减
  3. 03多项式趋势拟合与移除
  4. 04可组合的处理流水线
  5. 05用于选择网格算法的交叉验证
  6. 06基于距离的掩膜

适用场景

  1. 01插值离散高程测量值
  2. 02网格化投影后的地理坐标
  3. 03网格化前缩减聚集样本
  4. 04验证插值方案
  5. 05屏蔽远离观测点的网格单元

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/steadfastasart/geoscience-skills --skill verde

安装后在 Claude Code 中输入/verde确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
cross_validation.md
gridders.md
scripts/
grid_data.py

详细介绍

Verde - 空间数据网格化

快速参考

import verde as vd

# Basic gridding
spline = vd.Spline()
spline.fit(coordinates, values)  # coordinates = (lon, lat) tuple
grid = spline.grid(spacing=0.1)  # Returns xarray Dataset

# Access result
elevation = grid.elevation.values

# Save output
grid.to_netcdf('output.nc')

主要类

类用途
Spline双调和样条插值(平滑,外推效果好)
LinearDelaunay 三角剖分(速度快,不支持外推)
Cubic三次插值(平滑度适中)
Chain处理步骤流水线
BlockReduce将数据降采样为分块均值/中位数
Trend多项式趋势拟合与去除
Vector对 2 分量矢量数据进行网格化

基本操作

对离散数据进行网格化
coordinates = (longitude, latitude)  # Tuple of 1D arrays
values = elevation  # 1D array

spline = vd.Spline()
spline.fit(coordinates, values)
grid = spline.grid(spacing=0.1, data_names=['elevation'])
投影到笛卡尔坐标系
import pyproj

projection = pyproj.Proj(proj='merc', lat_ts=data_lat.mean())
proj_coords = projection(longitude, latitude)

spline = vd.Spline()
spline.fit(proj_coords, values)
grid = spline.grid(spacing=1000)  # 1000m spacing
对大型数据集进行分块降采样
import numpy as np

reducer = vd.BlockReduce(reduction=np.median, spacing=0.1)
coords_reduced, values_reduced = reducer.filter(coordinates, values)
网格化前去除趋势
trend = vd.Trend(degree=2)  # Quadratic
trend.fit(coordinates, values)
residuals = values - trend.predict(coordinates)

# Grid residuals, then add trend back
处理流水线
chain = vd.Chain([
    ('trend', vd.Trend(degree=1)),
    ('reduce', vd.BlockReduce(np.median, spacing=0.05)),
    ('spline', vd.Spline())
])
chain.fit(coordinates, values)
grid = chain.grid(spacing=0.01)
交叉验证
spline = vd.Spline()
scores = vd.cross_val_score(spline, coordinates, values, cv=5)
print(f"Mean R2: {scores.mean():.3f}")
屏蔽远离数据的区域
grid = spline.grid(spacing=0.1)
mask = vd.distance_mask(coordinates, maxdist=0.2, grid=grid)
grid_masked = grid.where(mask)

网格参数

参数描述
spacing网格单元大小(与坐标使用相同单位)
region(西、东、南、北) 边界
shape(n_north, n_east) 网格尺寸
adjust'spacing' 或 'region'——为精确匹配调整哪一项

网格器比较

网格器速度平滑度外推
Spline中等高良好
Linear快低无
Cubic快中等无

何时选择 Verde 或其他方案

使用场景工具原因
通用空间网格化Verde类似 ML 的 API、流水线和交叉验证
基础 1D/2D 插值scipy.interpolateAPI 更简单,不专注于空间数据
势场网格化Harmonica等效源专为重力/磁力数据设计
命令行批量网格化GMT功能强大的 CLI,适用于自动化脚本
地统计插值scikit-gstat / pykrige基于变异函数,并提供不确定性
超大型数据集(1000 万个点以上)GMT / GDAL大规模数据下的内存处理能力更好
矢量数据(GPS 速度)Verde (Vector)内置 2 分量矢量网格化
去除趋势并网格化Verde (Chain)通过流水线简洁地组合多个步骤

选择 Verde 的情况:需要使用 Python 风格、类似 scikit-learn 的 API,对 离散空间数据进行网格化,并且需要内置的交叉验证、趋势去除和流水线功能。 非常适合探索性分析和可复现工作流。

选择 scipy.interpolate 的情况:只需进行简单插值,不涉及空间坐标、投影或验证。

选择 GMT 的情况:需要通过命令行批量处理大型数据集,或需要集成基于 shell 的工作流并使用 surface 或 nearneighbor。

常见工作流

对离散空间数据进行网格化并验证
  • 加载离散点数据(坐标 + 数值)
  • 如有需要,将地理坐标投影到笛卡尔坐标系
  • 检查数据分布并识别聚集区或空缺
  • 使用 BlockReduce 对密集聚集区进行降采样
  • 使用 Trend(degree=1) 或 Trend(degree=2) 去除区域趋势
  • 使用 cross_val_score() 对网格器参数进行交叉验证
  • 根据 CV 分数调整 Spline(damping=...) 或 Spline(mindist=...)
  • 在残差上拟合选定的网格器(Spline、Linear 或 Cubic)
  • 使用 .grid() 按规则间距生成网格
  • 将趋势加回网格化残差
  • 使用 distance_mask() 裁剪外推伪影
  • 使用 xarray 绘图功能可视化网格:grid.elevation.plot()
  • 使用 grid.to_netcdf() 将结果保存为 NetCDF

常见问题

问题解决方案
外推效果差使用 distance_mask() 屏蔽远离数据的区域
处理大型数据时速度慢先使用 BlockReduce
存在区域趋势网格化前使用 Trend 去除趋势
间距错误检查坐标单位(度还是米)

参考资料

脚本

评论

支持 Markdown