You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用空间多边形(shapefile)提取NetCDF中的O3数据替代经纬度范围筛选

基于多边形Shapefile提取NetCDF中O3数据的实现方法

以下为R语言环境下的完整操作流程:

依赖安装

首先安装所需的空间处理包:

install.packages(c("ncdf4", "terra", "sf"))

操作步骤

  • 读取目标数据并对齐坐标系
library(sf)
library(terra)
library(ncdf4)

# 读取多边形shapefile,替换为你本地的文件路径
shp <- st_read("your_region.shp")
# 转换为WGS84坐标系,和NetCDF常用的经纬度坐标系对齐
shp_wgs84 <- st_transform(shp, crs = "EPSG:4326")

# 读取NetCDF文件
nc_obj <- nc_open("your_o3_data.nc")
# 提取O3变量、经纬度数组,变量名可根据你的NetCDF实际字段调整
o3_array <- ncvar_get(nc_obj, "O3")
lon_arr <- ncvar_get(nc_obj, "lon")
lat_arr <- ncvar_get(nc_obj, "lat")
nc_close(nc_obj)
  • 将O3数组转换为空间栅格对象
# 构造栅格对象,多时间维度数据会自动识别为多层栅格
o3_rast <- rast(
  x = o3_array,
  extent = ext(range(lon_arr), range(lat_arr)),
  crs = "EPSG:4326"
)
  • 多边形掩膜提取
# 转换shapefile格式适配栅格操作
shp_terra <- vect(shp_wgs84)
# 裁剪并掩膜,仅保留多边形覆盖范围内的O3数据
o3_extracted <- crop(o3_rast, shp_terra, mask = TRUE)
  • 结果导出
# 导出为带经纬度的表格
o3_df <- as.data.frame(o3_extracted, xy = TRUE)
write.csv(o3_df, "o3_polygon_extracted.csv", row.names = FALSE)

# 导出为新的NetCDF文件
writeCDF(o3_extracted, "o3_polygon_extracted.nc", 
         varname = "O3", unit = "μg/m³", # 单位替换为你数据的实际单位
         overwrite = TRUE)

注意事项

若你的NetCDF使用的是投影坐标系而非WGS84经纬度,需将st_transform的crs参数改为NetCDF对应的坐标系编码,保证两者坐标系完全一致,避免提取位置偏移。多时间维度的O3数据无需额外循环处理,上述流程会自动对每个时间层执行掩膜操作。

内容的提问来源于stack exchange,提问作者Lalantra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:57:04