与多边形相交时,Rgeos会删除关联的值


11

我正在尝试将两个SpatialPolygonsDataFrames相交,并得到一个SpatialPolygonsDataFrame作为结果。不幸的是,使用gIntersectionfrom函数rgeos(该函数可以快速地与多边形相交),我似乎无法检索到关联的数据框。考虑以下示例:

> fracPoly <- gIntersection( toSingle, fromSingle )
> class(toSingle)
[1] "SpatialPolygonsDataFrame"
> class(fromSingle)
[1] "SpatialPolygonsDataFrame"
> class(fracPoly)
[1] "SpatialPolygons"

我可以编写一个包装函数来处理的传递data.frames,但是正确完成所有检查将是一个小小的麻烦,在我希望有人可以确认没有更好的方法或将我指向另一个函数(或选项)之前,这会是一个小麻烦。为gIntersection),这将使我保留关联的data.frames

更新资料

经过进一步的思考,这可能是的非常刻意的行为gIntersection。毕竟,您传递了两个SPDF中的data.frame吗?因此,我可能必须编写一个将两者合并的包装器。


1
您如何加载polgyons-readShape *或readOGR?使用gIntersection时,我会得到奇怪的行为,具体取决于我用来加载SPDF的库,而我尚未深入了解该库。
Simbamangu 2012年

@Simbamangu有趣。我正在使用readShapePoly,然后合并到data.frame中。...–
Ari B. Friedman

gIntersection应该为重叠区域提供合并的data.frames-如果我在QGIS中运行Vector | Geoprocessing | Intersect,则输出是重叠的一组合并属性,并且QGIS不会对空间操作使用相同的GEOS库,例如这个?
Simbamangu 2012年

好吧,如果应该的话,我很沮丧。我已经重写了我的代码,以手工合并data.frames并重新整理它们,所以现在我不会再花更多的时间了。但是在shapefile中读取函数很重要的提示很有帮助。
阿里·弗里德曼

1
显然,这不是答案,但是我没有足够的要发表的意见... Ari,我想知道您是否会共享您的代码块,以按照rgeos覆盖函数提取变量。我无法绕过头来保持从各种rgeos操作(如gUnion)中保留的原始多边形ID的好方法……
jed.a.long

Answers:


2

对于某些项目,我也有同样的需求。除了保留data.frame,我们还需要放置更多代码来管理输出几何类型,并进行一些清理(例如,清理几何集合),以完成一些完整的交集地理处理。如果仍然需要在R中执行此类任务,可以尝试使用RFigisGeo软件包:

#install RFigisGeo
require(devtools) 
install_github("RFigisGeo", "openfigis")
require(RFigisGeo)

#compute intersection
result <- getIntersection(features1, features2)

您和@berndv的答案都看起来可以解决我的问题。谢谢!自从它问世以来就对其进行了标记。
Ari B. Friedman 2015年

10

gIntersection的行为是不会通过设计传递任何相交的数据:

由于相交的空间对象之间不存在一般匹配,因此对属性的任何任意操作都需要假设有关未知用户的意图。这就是为什么不应该通过任何数据插槽的原因...

... gIntesection()的设计是无限的,因为只有用户才能知道如何更改其几何形状的实体的属性。不同的用户可能会做出不同的假设,但是除了像row.names()机制那样通过相交几何的ID之外,没有其他通用的解决方案。

令我惊讶的是,栅格数据包具有交集功能,该功能也可以简单地交集并移交数据。

光栅包具有一些通过尝试也处理属性数据来扩展rgeos的功能。在这种情况下,请参见raster :: intersect以及此处的功能列表:?“ raster-package”(第XIV节)

我得到的完整信息是:http : //r-sig-geo.2731867.n2.nabble.com/Intended-usage-of-gIntersection-td7587120.html


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.