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

如何在R语言中提取栅格图层同一纬度的像素值?

提取栅格中指定纬度的像素值(R语言实现)

以下分别用terra和raster包实现提取北纬30°附近的NDVI像素值,假设你的栅格对象为地理坐标系(如WGS84,EPSG:4326),若为投影坐标系需先转换。

一、使用terra包(推荐,raster包的替代工具)

  1. 获取栅格每行对应的纬度值:
library(terra)
# 假设你的NDVI栅格对象名为ndvi_rast
y_vals <- yFromRow(ndvi_rast)
  1. 找到与北纬30°最接近的行索引(若栅格存在精确30°纬度,可直接用which(y_vals == 30)):
target_row <- which.min(abs(y_vals - 30))
  1. 提取该行的所有像素值:
# 提取为向量
ndvi_30n <- as.vector(slice(ndvi_rast, target_row))
# 或保留栅格格式
ndvi_30n_rast <- slice(ndvi_rast, target_row)

二、使用raster包

  1. 获取栅格每行对应的纬度值:
library(raster)
# 假设你的NDVI栅格对象名为ndvi_raster
y_vals <- yFromRow(ndvi_raster)
  1. 定位目标行:
target_row <- which.min(abs(y_vals - 30))
  1. 提取像素值:
# 提取为数据框,可转成向量
ndvi_30n_df <- extract(ndvi_raster, target_row)
ndvi_30n <- as.vector(ndvi_30n_df)

注意事项

  • 若栅格为投影坐标系(如UTM),需先转换为地理坐标系:
    • terra包:ndvi_geo <- project(ndvi_rast, "EPSG:4326")
    • raster包:ndvi_geo <- projectRaster(ndvi_raster, crs = "+proj=longlat +datum=WGS84")
  • 若需要提取的是精确纬度线而非栅格行(当栅格行不严格对应单一纬度时),可创建一条横跨栅格经度范围的线要素,再用extract函数提取线上的像素值:
# terra包示例
library(terra)
# 创建北纬30°的线,覆盖栅格经度范围
lon_range <- ext(ndvi_rast)[c(1,2)]
line <- vect(paste0("LINESTRING(", lon_range[1], " 30, ", lon_range[2], " 30)"), crs = crs(ndvi_rast))
# 提取线上的NDVI值
ndvi_30n_line <- extract(ndvi_rast, line)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:00:58