由无效的多边形几何形状引起的“ TopologyException:输入几何1无效”自相交错误已得到广泛讨论。但是,我没有在网络上找到仅依赖于R功能的便捷解决方案。
例如,我已经设法从map("state", ...)
遵循Josh O'Brien 在这里的好答案的输出中创建一个“ SpatialPolygons”对象。
library(maps)
library(maptools)
map_states = map("state", fill = TRUE, plot = FALSE)
IDs = sapply(strsplit(map_states$names, ":"), "[[", 1)
spydf_states = map2SpatialPolygons(map_states, IDs = IDs, proj4string = CRS("+init=epsg:4326"))
plot(spydf_states)
现在,这种广泛应用的数据集的问题在于自相交发生在以下给定的点。
rgeos::gIsValid(spydf_states)
[1] FALSE
Warning message:
In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") :
Self-intersection at or near point -122.22023214285259 38.060546477866055
不幸的是,此问题阻止了对spydf_states的任何进一步使用,例如在调用时rgeos::gIntersection
。如何在R中解决此问题?
plot(spydf_states, xlim=c(-122.1,-122.3),ylim=c(38,38.1))
您会发现那里没有“貌似”的地方-有一个自相交处。