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

从卫星影像文件名提取日期并匹配提取NDVI值的技术需求

从卫星影像文件名提取日期并匹配NDVI值的R代码补充方案

需求说明

现有一批卫星影像文件,文件名格式为mosaic_NDVI_YYYY_MM_DD.tif,需从文件名中提取日期,与数据集里的记录匹配最近日期的影像,提取对应坐标的NDVI值。以下是补充提取日期的代码段及完整修正后的代码。

提取日期的代码实现

可以通过正则表达式或字符串分割两种方式提取日期,以下是两种可行方案:

方案1:正则表达式(推荐,更简洁)

利用正则表达式捕获文件名中的年、月、日部分,直接转换为YYYY-MM-DD格式:

# 提取日期并转换格式
filename_dates <- sub("mosaic_NDVI_(\\d{4})_(\\d{1,2})_(\\d{1,2})\\.tif", "\\1-\\2-\\3", filenames)

方案2:字符串分割

通过拆分文件名获取日期部分,再拼接成目标格式:

# 按下划线拆分文件名,提取年、月、日部分
split_names <- strsplit(filenames, "_")
# 拼接为YYYY-MM-DD格式并去除.tif后缀
filename_dates <- sapply(split_names, function(x) paste(x[3], x[4], sub("\\.tif$", "", x[5]), collapse = "-"))

完整修正后的代码

注意:原代码中循环内创建point_vec时错误使用了df[1,],应改为df[i,]才能匹配当前行的坐标,已修正:

# 示例数据
df <- data.frame(date = c("2000-7-26", "2000-10-20", "2000-12-10"), 
                 lon = c(23.05, 23.12, 23.08), 
                 lat = c(-32.56, -32.61, -32.53))
df$date <- lubridate::as_date(df$date)

filenames <- c("mosaic_NDVI_2000_10_15.tif", "mosaic_NDVI_2000_10_31.tif", 
               "mosaic_NDVI_2000_11_16.tif", "mosaic_NDVI_2000_12_18.tif", 
               "mosaic_NDVI_2000_12_2.tif",  "mosaic_NDVI_2000_7_27.tif")

# --- 补充的提取日期代码 ---
filename_dates <- sub("mosaic_NDVI_(\\d{4})_(\\d{1,2})_(\\d{1,2})\\.tif", "\\1-\\2-\\3", filenames)
# --------------------------

filename_dates <- lubridate::as_date(filename_dates)

for(i in 1:nrow(df)){
  date <- df$date[i]
  # 找到日期差最小的影像索引
  index <- which(abs(filename_dates - date) == min(abs(filename_dates - date)))
  extraction_filename <- filenames[index]
  # 修正:使用当前行的坐标创建矢量点
  point_vec <- vect(df[i,], geom=c("lon", "lat"), crs="+proj=longlat +datum=WGS84", keepgeom=FALSE)
  NDVI <- rast(extraction_filename)
  crs(NDVI) <- crs(point_vec)
  value <- terra::extract(x=NDVI, y=point_vec, df=TRUE)
  df$NDVI[i] <- value[2]
}

说明

  • 正则表达式方案更高效,适合处理大量文件名(400+文件);
  • 若存在多个日期差相同的影像,which会返回所有匹配索引,可根据需求调整(如取第一个);
  • 确保terra包已正确安装加载,用于影像读取和坐标提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:21:05