【问题标题】:Raster of Latitudes and Longitudes经纬度栅格
【发布时间】:2016-02-23 14:54:46
【问题描述】:

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

例如,r 可能看起来像:

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

【问题讨论】:

  • 您可以先在栅格中创建/读取,然后分别使用xFromCell()yFromCell() 提取每个单元格的纬度或经度,然后使用setValues() 将提取的值分配为新单元格值
  • 不要忘记标记语言 - 如果没有您的其他帖子,我们将不知道您在什么环境中尝试此操作。(我已将其标记为 r
  • 我冒昧地澄清了您的问题并添加了示例栅格...希望您不要介意。

标签: r raster


【解决方案1】:

你可以使用init函数

library(raster)
r <- raster(nrow=10, ncol=10)
lon <- init(r, 'x')
lat <- init(r, 'y')

【讨论】:

  • 整洁 - 不知道这一点。
【解决方案2】:

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

【讨论】:

  • 酷!现在,如果我想要整个地球的这张地图,我可以在哪里设置范围?
  • @IDelToro:试试r &lt;- raster(extent(-180, 180, -90, 90), res=1)(将 res 设置为您喜欢的像元大小,在这种情况下以度数表示)
【解决方案3】:

如果您的问题是关于创建一个与另一个光栅对象具有相同范围和分辨率的新光栅对象,您可以使用命令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)

【讨论】:

    【解决方案4】:

    如果有人只是在寻找一个全球纬度栅格来下载,并且对它的制作方法不太感兴趣,我在这里发布了一个:

    正负值(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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多