用R相交两个shapefile

时间:2017-02-10 12:35:06

标签: r

我想我想做一些非常基本的事情,但我似乎找不到关于如何做的帖子。如果我错了并且已经有关于这个主题的帖子,我道歉!

我有两个shapefile,你可以通过这个link找到:

setwd("~/where you saved your data")
nuts <- readOGR(".", layer = "NUTS_RG_60M_2010")
aqueduct <- readOGR(".", layer = "aqueduct_global_dl_20150409")

说实话,现在我已经卡住了。 我想将aqueduct shapefile的所有变量的值添加到nuts文件的相交nuts3区域。

我尝试过gIntersection,交叉,提取......但没有成功。有人可以帮我把交叉点弄正确吗?最终结果是一个带有aqueduct-shapefile的所有变量的nut-shapefile。

非常感谢!

1 个答案:

答案 0 :(得分:1)

这是两个多边形图层的空间连接。除非 nuts 中的每个特征与渡槽的一个特征完全相交,否则没有直接/单一的方式来进行空间连接。

相反,您可以从与坚果的每个功能相对应的渡槽属性表中获取行的列表 -

nuts_over1 = over(nuts, aqueduct, returnList = TRUE)

或者用函数汇总特定属性,在这种情况下,结果可以连接回 nuts 的属性表。例如,渡槽与六个第一特征相交的国家如下 -

nuts_over2 = over(
  nuts, 
  aqueduct[, "COUNTRY"], 
  fn = function(x) paste(x, collapse = ", ")
)
head(nuts_over2)
                                                          COUNTRY
1                              Austria, Hungary, Austria, Hungary
2 Austria, Hungary, Austria, Hungary, Slovakia, Austria, Slovakia
3                     Austria, Austria, Hungary, Austria, Hungary
4                                                         Austria
5                     Austria, Austria, Austria, Austria, Austria
6                                                Austria, Austria 

此信息可以连接回坚果的属性表,如下所示 -

nuts@data = cbind(nuts@data, nuts_over2)
head(nuts@data)
  NUTS_ID STAT_LEVL_ SHAPE_Leng SHAPE_Area
0   AT111          3   1.089017 0.08091455
1   AT112          3   2.257319 0.20926007
2   AT113          3   2.002492 0.17728455
3   AT121          3   3.158370 0.40147321
4   AT122          3   2.956927 0.42675504
5   AT123          3   2.010415 0.14145865
                                                          COUNTRY
0                              Austria, Hungary, Austria, Hungary
1 Austria, Hungary, Austria, Hungary, Slovakia, Austria, Slovakia
2                     Austria, Austria, Hungary, Austria, Hungary
3                                                         Austria
4                     Austria, Austria, Austria, Austria, Austria
5                                                Austria, Austria