【问题标题】:Global Raster of geographic distances地理距离的全球栅格
【发布时间】:2016-02-22 14:06:37
【问题描述】:

我想知道是否有人建立了世界大陆的栅格,其中每个单元格等于该单元格单元格到最近海岸的距离。这张地图将突出显示最偏远的内陆地区。

我想这只是rasterize 一个全局边界的shapefile,然后计算距离。

【问题讨论】:

    标签: r distance raster shapefile rasterize


    【解决方案1】:

    您可以使用raster::distance 执行此操作,它会计算每个NA 单元格到最近的非NA 单元格的距离。您只需要为陆地像素创建一个具有NA 的栅格,并为非陆地像素创建一些其他值。

    方法如下:

    library(raster)
    library(maptools)
    data(wrld_simpl)
    
    # Create a raster template for rasterizing the polys. 
    # (set the desired grid resolution with res)
    r <- raster(xmn=-180, xmx=180, ymn=-90, ymx=90, res=1)
    
    # Rasterize and set land pixels to NA
    r2 <- rasterize(wrld_simpl, r, 1)
    r3 <- mask(is.na(r2), r2, maskvalue=1, updatevalue=NA)
    
    # Calculate distance to nearest non-NA pixel
    d <- distance(r3)
    
    # Optionally set non-land pixels to NA (otherwise values are "distance to non-land")
    d <- d*r2
    

    创建上面的图(我喜欢rasterVis 用于绘图,但你可以使用plot(r)):

    library(rasterVis)
    levelplot(d/1000, margin=FALSE, at=seq(0, maxValue(d)/1000, length=100),
              colorkey=list(height=0.6), main='Distance to coast')
    

    【讨论】:

    • 很好的答案!两个后续问题:1)像素的分辨率可以进一步缩小吗? 2)地图的值被解释为公里?
    • @IDelToro (1) 您可以在我们定义r 的地方设置所需的分辨率(res 参数,此处以度为单位); (2) 看看?raster - 如果数据是“未投影的”(即地理),就像这里一样,那么distance 的输出以米为单位。否则,它是投影的单位。请注意,当我绘制它时,我除以 1000,得到公里。
    • 谢谢!您会以同样的方式创建纬度(或经度)值的栅格吗?
    • @IDelToro:您可以从您的其他栅格之一中获取这些信息,例如lon &lt;- lat &lt;- d; lon[] &lt;- coordinates(d)[, 1]; lat[] &lt;- coordinates(d)[, 2]。如果从头开始制作,请从矩阵 m 开始,例如经度,然后是 raster(m)
    • 感谢您的回答。一般感兴趣:我发现将 res 增加到 0.5 会导致处理时间显着增加(这很好),但进一步增加到 0.1 度永远不会完成。还有人发现这个吗?没有错误,它只是消耗了 1 个核心的 100%,并且没有提示它是否正在运行或已挂起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2012-12-12
    • 2021-03-18
    • 2021-07-27
    相关资源
    最近更新 更多