纬度和经度的光栅

时间:2016-02-23 14:54:47

标签: r raster

鉴于raster对象r,如何创建具有相同范围和分辨率的新栅格,其单元格值等于{{1}中相应单元格的纬度(或经度) }?

例如,r可能如下所示:

r

4 个答案:

答案 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')))

enter image description here

答案 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)