【问题标题】:How to divide polygon in R?如何在R中划分多边形?
【发布时间】:2014-03-24 21:39:01
【问题描述】:

我有一个亚马逊州(巴西)和该州六大河流(内格罗、索利蒙斯、亚马逊、马德拉、普鲁斯和朱鲁阿)的 shapefile。我想使用河流划分州,以获得河间区域(Madeira-Purus、Purus-Juruá 等)。我想得到由这些河流划定的最后 6 个区域,每个区域都是一个不同的多边形。我该怎么做?

我只是在寻找“剪裁”算法,这些算法给了我州内河流的面积,这不是我想要的。

【问题讨论】:

  • 您是否将河流作为简单的中心线?因为您的地图显示了很多结构,尤其是在河流较宽的 1 和 2 之间。
  • 查看this answer
  • 我只是在寻找“剪辑”和“分割”这两个词,@RichardScriven。 “差异”是关键词!
  • @Spacedman,是的,那里有成千上万个岛屿。但我会简单地将它们扔掉并保留更大的多边形。
  • 谢谢,jbaums,它成功了。我正在寻找的是 gDifference。如果您将此作为答案,我会接受。

标签: r polygon divide


【解决方案1】:

根据@jbaums 的评论,我使用了来自 rgeos 包的 gDifference:

intflv <- gDifference(state,rivers)

但由于“状态”只有一个多边形,intflv 变成了一个 SpatialPolygons 对象,只有一个多边形,由数千个子多边形组成。为了在 GIS 软件中更好地工作,我希望它是一个包含数千个多边形的对象,每个多边形都是一个子多边形。所以我做了:

l <- list()
total <- length(intflv@polygons[[1]]@Polygons)
for (i in 1:total) {
    print(paste(i,total,sep="/"))
    flush.console()
    P <- intflv@polygons[[1]]@Polygons[[i]]
    l[[length(l)+1]] <- Polygons(list(P),i)
}
sp <- SpatialPolygons(l)
d <- data.frame(IDs=1:total)
intflv1 <- SpatialPolygonsDataFrame(sp,data=d)
writeOGR(intflv1,"shp","intflv","ESRI Shapefile")

结果(只保留最大区域后):

【讨论】:

  • 感谢您抽出宝贵时间回答您自己的问题。这是我确信我将来会回来的事情。 (PS:接受自己的解决方案并没有错。)
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 2015-09-12
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多