鉴于raster
对象r
,如何创建具有相同范围和分辨率的新栅格,其单元格值等于{{1}中相应单元格的纬度(或经度) }?
例如,r
可能如下所示:
r
答案 0 :(得分:9)
您可以使用init
功能
library(raster)
r <- raster(nrow=10, ncol=10)
lon <- init(r, 'x')
lat <- init(r, 'y')
答案 1 :(得分:4)
一种简单的方法是(1)复制栅格r
,(2)用coordinates
提取坐标,(3)为新栅格对象分配经度或纬度'细胞
例如,使用您的r
:
library(raster)
r <- raster(matrix(runif(100), ncol=10))
lat <- lon <- r
xy <- coordinates(r)
lon[] <- xy[, 1]
lat[] <- xy[, 2]
这就是他们的样子:
plot(setNames(stack(r, lon, lat), c('r', 'lon', 'lat')))
答案 2 :(得分:1)
如果您的问题是创建一个与另一个栅格对象具有相同范围和分辨率的新栅格对象,则可以使用命令template
template
是用于设置范围的Raster *或Extent对象(如果是Raster *对象,则为CRS)。如果不为NULL,则忽略参数xmn,xmx,ymn,ymx和crs(除非模板是Extent对象)
r <- raster(matrix(runif(100), ncol=10))
r1 <- raster(x, template=r)
答案 3 :(得分:0)
如果有人只是想要下载一个全球性的纬度栅格,而对它的制作方式不太感兴趣,我在这里发布了一个:
正值和负值(90S为-90): https://drive.google.com/open?id=1fV1pnvlzi2PTJM7e6zx0S5IMP1mg09m-
正值(90S为90): https://drive.google.com/open?id=1ibyNAp1c0E_DY9bFF-1gJw0vizKRmDUT
这些是以0.1度的间隔发布的。
要生成的Python代码:
import rasterio
import numpy as np
cellsize = .1
xedges = np.arange(-180,180,cellsize)
yedges = np.arange(90,-90,-cellsize)
XI, YI = np.meshgrid(xi,yi)
t = rasterio.transform.from_origin(xedges[0], yedges[0], cellsize, cellsize)
with rasterio.open('latitude.tif', 'w', driver='GTiff',
height=YI.shape[0], width=YI.shape[1],
count=1, dtype=np.float32, transform=t) as src:
src.write(YI.astype(np.float32), 1)
with rasterio.open('latitude_abs.tif', 'w', driver='GTiff',
height=YI.shape[0], width=YI.shape[1],
count=1, dtype=np.float32, transform=t) as src:
src.write(np.abs(YI).astype(np.float32), 1)