给定raster对象r,如何创建具有相同范围和分辨率的新栅格,且像元值等于r中对应像元的纬度(或经度)?例如,r可能如下所示:
raster
r
r <- raster(matrix(runif(100), ncol=10))
kpbpu0081#
您可以使用init函数
init
library(raster) r <- raster(nrow=10, ncol=10) lon <- init(r, 'x') lat <- init(r, 'y')
或者和泰拉
library(terra) x <- rast(nrow=10, ncol=10) lon <- init(x, 'x') lat <- init(x, 'y')
llycmphe2#
执行此操作的简单方法是(1)复制栅格r,(2)使用coordinates提取其坐标,以及(3)将经度或纬度指定给新栅格对象的像元。例如,使用r:
coordinates
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')))
b1zrtrql3#
如果您的问题是创建一个与其他栅格对象具有相同范围和分辨率的新栅格对象,则可以使用命令templatetemplate是用于设置范围的Raster* 或范围对象(如果是Raster* 对象,则为CRS)。如果不为NULL,则忽略参数xmn、xmx、ymn、ymx和crs(除非模板是范围对象
template
r <- raster(matrix(runif(100), ncol=10)) r1 <- raster(x, template=r)
m1m5dgzv4#
如果有人只是想下载一个全球纬度栅格,而对它是如何制作的不太感兴趣,我在这里发布了一个:正值和负值(90 S为-90):https://drive.google.com/open?id=1fV1pnvlzi2PTJM7e6zx0S5IMP1mg09m-仅正值(90 S为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)
4条答案
按热度按时间kpbpu0081#
您可以使用
init
函数或者和泰拉
llycmphe2#
执行此操作的简单方法是(1)复制栅格
r
,(2)使用coordinates
提取其坐标,以及(3)将经度或纬度指定给新栅格对象的像元。例如,使用
r
:这是它们的样子:
b1zrtrql3#
如果您的问题是创建一个与其他栅格对象具有相同范围和分辨率的新栅格对象,则可以使用命令
template
template
是用于设置范围的Raster* 或范围对象(如果是Raster* 对象,则为CRS)。如果不为NULL,则忽略参数xmn、xmx、ymn、ymx和crs(除非模板是范围对象m1m5dgzv4#
如果有人只是想下载一个全球纬度栅格,而对它是如何制作的不太感兴趣,我在这里发布了一个:
正值和负值(90 S为-90):https://drive.google.com/open?id=1fV1pnvlzi2PTJM7e6zx0S5IMP1mg09m-
仅正值(90 S为90):https://drive.google.com/open?id=1ibyNAp1c0E_DY9bFF-1gJw0vizKRmDUT
它们以0.1度的间隔贴出。
要生成的Python代码: