AgentSkillsCN

verde

采用机器学习风格的API进行空间数据网格化与插值处理。将地理与笛卡尔坐标点数据处理为规则网格。当Claude需要执行以下操作时使用:(1) 将散乱的空间数据网格化为规则网格;(2) 采用样条、线性或三次插值方法对点数据进行插值;(3) 对地理坐标进行投影变换;(4) 通过分块平均法降低大数据集的维度;(5) 从空间数据中去除多项式趋势;(6) 对网格化参数进行交叉验证;(7) 通过Chain构建数据处理流水线;(8) 对GPS速度等矢量数据进行网格化处理。

SKILL.md
--- frontmatter
name: verde
description: |
  Spatial data gridding and interpolation with a machine-learning style API. Process
  geographic and Cartesian point data onto regular grids. Use when Claude needs to:
  (1) Grid scattered spatial data onto regular grids, (2) Interpolate point data using
  splines, linear, or cubic methods, (3) Process geographic coordinates with projections,
  (4) Reduce large datasets using block averaging, (5) Remove polynomial trends from
  spatial data, (6) Cross-validate gridding parameters, (7) Create processing pipelines
  with Chain, (8) Grid vector data like GPS velocities.

Verde - Spatial Data Gridding

Quick Reference

python
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')

Key Classes

ClassPurpose
SplineBi-harmonic spline interpolation (smooth, good extrapolation)
LinearDelaunay triangulation (fast, no extrapolation)
CubicCubic interpolation (medium smoothness)
ChainPipeline of processing steps
BlockReduceDecimate data to block means/medians
TrendPolynomial trend fitting and removal
VectorGrid 2-component vector data

Essential Operations

Grid Scattered Data

python
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'])

Project to Cartesian

python
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

Block Reduce Large Datasets

python
import numpy as np

reducer = vd.BlockReduce(reduction=np.median, spacing=0.1)
coords_reduced, values_reduced = reducer.filter(coordinates, values)

Remove Trend Before Gridding

python
trend = vd.Trend(degree=2)  # Quadratic
trend.fit(coordinates, values)
residuals = values - trend.predict(coordinates)

# Grid residuals, then add trend back

Processing Pipeline

python
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)

Cross-Validation

python
spline = vd.Spline()
scores = vd.cross_val_score(spline, coordinates, values, cv=5)
print(f"Mean R2: {scores.mean():.3f}")

Mask Far from Data

python
grid = spline.grid(spacing=0.1)
mask = vd.distance_mask(coordinates, maxdist=0.2, grid=grid)
grid_masked = grid.where(mask)

Grid Parameters

ParameterDescription
spacingGrid cell size (same units as coordinates)
region(west, east, south, north) bounds
shape(n_north, n_east) grid dimensions
adjust'spacing' or 'region' - which to adjust for exact fit

Gridder Comparison

GridderSpeedSmoothnessExtrapolation
SplineMediumHighGood
LinearFastLowNone
CubicFastMediumNone

Common Issues

IssueSolution
Poor extrapolationUse distance_mask() to mask far from data
Slow with large dataUse BlockReduce first
Regional trendsRemove with Trend before gridding
Wrong spacingCheck coordinate units (degrees vs meters)

References

Scripts