【问题标题】:calculating road density raster from road shapefile从道路形状文件计算道路密度栅格
【发布时间】:2021-09-02 18:12:52
【问题描述】:

我希望使用 R 将美国东半部的道路形状文件(包括每条道路的长度列)转换为 1x1 公里道路密度的栅格。

我在 Arcmap 中找不到直接的方法(线密度与单元中心的半径一起工作,而不仅仅是单元格)。

【问题讨论】:

  • 请使用可重现的示例更新您的问题(有关提示,请参阅here)。如果你不更新你的问题,这应该因为缺乏细节而关闭
  • 我不能这样做,因为我目前没有代码,我只是在寻找使用什么包/功能的指导

标签: r raster r-raster rasterizing


【解决方案1】:

这是一个从栅格单元创建多边形的解决方案(改编自我的回答 here)。您可能需要对数据集的子集进行此操作,然后合并。

示例数据

library(terra)
v <- vect(system.file("ex/lux.shp", package="terra"))
roads <- as.lines(v)
rs <- rast(v)

解决方案

values(rs) <- 1:ncell(rs)
names(rs) <- "rast"    
rsp <- as.polygons(rs)

rp <- intersect(roads, rsp)

rp$length <- perim(rp) / 1000 #km
x <- tapply(rp$length, rp$rast, sum)

r <- rast(rs)
r[as.integer(names(x))] <- as.vector(x)

plot(r)
lines(roads)

【讨论】:

  • 谢谢@Robert Hijmans,该示例有效,但由于我不熟悉 Terra,我不确定如何将我的 shapefile (SpatiallinesDataFrame / SP) 转换为 Spatvector。我一直在网上搜索,但没有找到直接的解决方案...
  • 我的代码的第二行显示了要使用的函数:vect。使用文件或 sp 对象。
  • 谢谢@Robert Hijmans!肯定会取得进展,但分辨率仍然存在问题,我需要非常精细的(相对于研究区域)1 平方公里的分辨率,但 res(r) 给了我 345410.4x226742.4(据说是米)。你给我的代码的哪一部分控制了分辨率,我怎样才能将输出栅格更改为 1sqkm?
  • 见 ?rast 或做类似res(rs) &lt;- 1000
猜你喜欢
  • 2010-12-05
  • 2019-05-14
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多