R语言 经纬度栅格

aij0ehis  于 2023-01-15  发布在  其他
关注(0)|答案(4)|浏览(217)

给定raster对象r,如何创建具有相同范围和分辨率的新栅格,且像元值等于r中对应像元的纬度(或经度)?
例如,r可能如下所示:

r <- raster(matrix(runif(100), ncol=10))
kpbpu008

kpbpu0081#

您可以使用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')
llycmphe

llycmphe2#

执行此操作的简单方法是(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')))

b1zrtrql

b1zrtrql3#

如果您的问题是创建一个与其他栅格对象具有相同范围和分辨率的新栅格对象,则可以使用命令template
template是用于设置范围的Raster* 或范围对象(如果是Raster* 对象,则为CRS)。如果不为NULL,则忽略参数xmn、xmx、ymn、ymx和crs(除非模板是范围对象

r <- raster(matrix(runif(100), ncol=10))
r1 <- raster(x, template=r)
m1m5dgzv

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)

相关问题