2012-05-06 39 views
2

我试图使用readShapePoly命令将多边形导入到R中,并使用as(filename,"owin")将多边形转为边框。我不断收到的答复中说多边形包含重复顶点和自交的多边形:R中的相交多边形,Spatstat中的空间聚类分析的导入多边形

Polygon 1 contains duplicated vertices 
Polygon 1 is self-intersecting 
2, 3, 4, 5, 6, 7, 8, 9, 10. 
done. 
Polygon 1 contains duplicated vertices 
Polygon 1 is self-intersecting 
Checking for cross-intersection between 10 polygons...1, 2, 3, 4, 5, 6, 7, 8, 9. 
done. 
Error in owin(poly = opls) : 
    Polygon data contain duplicated vertices and self-intersection 

我试图清理在ArcGIS修复几何函数的多边形,但它并没有帮助。我能做什么?

回答

2

更新:您可以使用零宽度缓冲区以自动方式修复大多数这些类型的问题。使用风险自负,没有办法知道在没有调查涉及的数据的情况下这是否合理。

例如:

gIsValid(gBuffer(p4, width = 0, byid = TRUE)) 
[1] TRUE 

原来的答复如下:

结束时更新

您可能需要更好的工具来修复几何,或手动调查的问题自己。 rgeos包可用于描述存在的问题,并且您可以直观地识别它们发生的位置 - 然后直接在R中编辑它们或返回到GIS并在此处执行。下面是来自gIsValid功能帮助一个简单的例子:

library(rgeos) 
p4 = readWKT("POLYGON ((0 40, 0 0, 40 40, 40 0, 0 40))") 
gIsValid(p4, reason = TRUE) 
[1] "Self-intersection[20 20]" 

更改为更具描述性的警告reason返回值:

gIsValid(p4) 
[1] FALSE 
Warning message: 
In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") : 
    Self-intersection at or near point 20 20 

所以现在绘制多边形和突出问题的观点:

plot(p4, col = "grey") 
points(20, 20, pch = 3, cex = 3, col = "red") 
axis(1);axis(2);box() 

Self-intersection polygon

既然你是从shape文件读取,你可以使用byid参数测试哪些多边形需要调查(尽管在这个例子中,他们无一不精):

library(maptools) 
xx <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1], 
    IDvar="FIPSNO", proj4string=CRS("+proj=longlat +ellps=clrk66")) 
gIsValid(xx, byid = TRUE) 
37001 37003 37005 37007 37009 37011 
TRUE TRUE TRUE TRUE TRUE TRUE 
... 

等等