经纬度栅格
Raster of Latitudes and Longitudes
给定 raster
对象 r
,我如何创建一个具有相同范围和分辨率的新栅格,其像元值等于 [= 中相应像元的纬度(或经度) 12=]?
例如,r
可能看起来像:
r <- raster(matrix(runif(100), ncol=10))
一个简单的方法是 (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')))
如果您的问题是关于创建一个与另一个栅格对象具有相同范围和分辨率的新栅格对象,您可以使用命令 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)
您可以使用init
函数
library(raster)
r <- raster(nrow=10, ncol=10)
lon <- init(r, 'x')
lat <- init(r, 'y')
如果有人只是想下载一个全球纬度栅格,并且对它是如何制作的不太感兴趣,我在这里发布了一个:
正负值(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)
给定 raster
对象 r
,我如何创建一个具有相同范围和分辨率的新栅格,其像元值等于 [= 中相应像元的纬度(或经度) 12=]?
例如,r
可能看起来像:
r <- raster(matrix(runif(100), ncol=10))
一个简单的方法是 (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')))
如果您的问题是关于创建一个与另一个栅格对象具有相同范围和分辨率的新栅格对象,您可以使用命令 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)
您可以使用init
函数
library(raster)
r <- raster(nrow=10, ncol=10)
lon <- init(r, 'x')
lat <- init(r, 'y')
如果有人只是想下载一个全球纬度栅格,并且对它是如何制作的不太感兴趣,我在这里发布了一个:
正负值(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)