R如何使用砖从常规tif中获取纬度矢量

时间:2018-06-25 09:44:39

标签: r raster tiff

我有一个使用Brick读取的tif文件。我可以看到tif文件的空间扩展:

b<-brick("t.tif")
b 
class       : RasterBrick 
dimensions  : 10, 10, 100, 1  (nrow, ncol, ncell, nlayers)
resolution  : 0.0001851853, 0.0001851854  (x, y)
extent      : -18.61944, -18.61759, 37.83856, 37.84041  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
data source : /scratch/tompkins/water_allafrica/t.tif 
names       :   t 
min values  :   0 
max values  : 255 

extent(SpatialPoints(b))
class       : Extent 
xmin        : -18.61935 
xmax        : -18.61769 
ymin        : 37.83865 
ymax        : 37.84031 

但是我想不出如何轻松获取经度和纬度向量,因此我需要定义要写出的netcdf文件头。我可以手动完成,但我想有一个易于使用的内置函数。

示例输入文件在这里:http://clima-dods.ictp.it/Users/tompkins/stackoverflow/t.tif

1 个答案:

答案 0 :(得分:1)

这可能是您需要的:

ext <- extent(b)

lat <- seq(ext@ymin,ext@ymax,res(b)[2])
lon <- seq(ext@xmin,ext@xmax,res(b)[1])

因此,基本上,您正在创建一个从x / y min到max的序列向量,且间隔为砖块的分辨率。

这些值指的是单元格的角坐标...您也可能对单元格中心感兴趣。

仅供说明:

# create testraster
x <- raster(resolution=c(40,40))

x[]<- 1:ncell(x)

# plot

plot(x)

# add corner coordinates


plot(SpatialPoints(cbind(rep(extent(x)@xmin,10),seq(extent(x)@ymin,extent(x)@ymax,res(x)[2])),proj4string = crs(x)),
     col='red',pch='*',cex=5,add=T)


# add cell centers

plot(SpatialPoints(xyFromCell(x,cellFromRowCol(x,1:nrow(x),1)),proj4string = crs(x)),
     col='blue',pch='*',cex=5,add=T)

enter image description here

因此,上述方法为您提供了由红色星号表示的纬度。如果需要蓝色的,可以使用xyFromCell来返回栅格像元的坐标。