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

如何在R中导入正弦投影遥感数据并转为规则栅格?

解决ESACCI海洋颜色正弦投影数据转规则网格问题

你读取的ESACCI CCI海洋颜色数据是**正弦投影(Sinusoidal)**下的一维有效像素数据(仅保留海洋区域),需要先恢复其空间属性,再投影到规则网格。以下是具体步骤:

步骤1:读取完整数据变量

除了叶绿素浓度(chlor_a),还需要读取对应经纬度变量,用于定位像素:

library(terra)

# 数据文件路径
file_path <- "/vsicurl/https://dap.ceda.ac.uk/neodc/esacci/ocean_colour/data/v5.0-release/sinusoidal/netcdf/chlor_a/daily/v5.0/2007/ESACCI-OC-L3S-CHLOR_A-MERGED-1D_DAILY_4km_SIN_PML_OCx-20070104-fv5.0.nc?download=1"

# 读取关键变量
r_chlor <- rast(file_path, lyrs = "chlor_a")
r_lat <- rast(file_path, lyrs = "lat")
r_lon <- rast(file_path, lyrs = "lon")

步骤2:转换为点矢量数据

将一维像素值转换为带坐标的点矢量,为后续栅格化做准备:

# 提取所有变量的值
chlor_vals <- values(r_chlor)
lat_vals <- values(r_lat)
lon_vals <- values(r_lon)

# 创建WGS84经纬度投影的点矢量
pts <- vect(cbind(lon_vals, lat_vals), crs = "+proj=longlat +datum=WGS84")
# 为点添加叶绿素浓度属性
values(pts) <- data.frame(chlor_a = chlor_vals)

步骤3:定义目标规则网格

根据需求设置目标投影、分辨率和范围(这里以常用的WGS84经纬度为例):

# 目标栅格参数:WGS84经纬度,0.04°分辨率(约4km,匹配原始数据精度),覆盖全球
target_crs <- "+proj=longlat +datum=WGS84"
target_ext <- ext(-180, 180, -90, 90)
target_res <- 0.04

# 创建空的目标栅格
target_rast <- rast(extent = target_ext, resolution = target_res, crs = target_crs)

步骤4:栅格化到目标规则网格

使用rasterize将点数据转换为规则栅格,选择最近邻插值适配离散海洋像素:

# 栅格化点数据
chlor_rast <- rasterize(pts, target_rast, field = "chlor_a", fun = "first")

# 查看结果
chlor_rast

可选:先恢复原始正弦投影栅格再投影

如果需要先保留原始正弦投影的规则栅格,再投影到目标网格,可按以下操作:

  1. 读取原始正弦投影的x、y坐标变量(文件自带),创建正弦投影下的点矢量:
r_x <- rast(file_path, lyrs = "x")
r_y <- rast(file_path, lyrs = "y")
x_vals <- values(r_x)
y_vals <- values(r_y)

sinu_pts <- vect(cbind(x_vals, y_vals), crs = "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m")
values(sinu_pts) <- data.frame(chlor_a = chlor_vals)
  1. 创建原始正弦投影的规则空栅格(参考ESACCI文档的4km分辨率全球范围):
sinu_rast <- rast(extent = ext(-17367530.45, 17367530.45, -7301427.63, 7301427.63), 
                  resolution = 4000, 
                  crs = "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m")
  1. 栅格化到正弦栅格后再投影到目标网格:
sinu_chlor <- rasterize(sinu_pts, sinu_rast, field = "chlor_a", fun = "first")
chlor_proj <- project(sinu_chlor, target_rast, method = "bilinear")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:25:23