绘制地理多边形不是R的强度,但如果done well,它可能会非常有益。我正在使用来自英国的数据,并且多边形边界中的细节非常高,使得任何绘图或操作功能(特别是在强化之后运行以使其成为ggplot-able)变慢。
逻辑方法是简化多边形几何,因此它们不那么复杂。
我按照post来实现Douglas-Peucker算法在R中执行此操作,但速度非常慢。应用于this dataset(英格兰地区),以下代码需要大约10分钟才能在我的英特尔®酷睿™i7-3630QM机器上运行,内存为16 Gb:
for(i in 1:length(gors@polygons)){
for(j in 1:length(gors@polygons[[i]]@Polygons)){
temp <- as.data.frame(gors@polygons[[i]]@Polygons[[j]]@coords)
names(temp) <- c("x", "y")
temp2 <- dp(temp, 0.01)
gors@polygons[[i]]@Polygons[[j]]@coords <- as.matrix(cbind(temp2$x, temp2$y))
}QGIS
}
在QGIS中,相同的功能大约花了一秒钟。 当然,我可能会在未来使用QGIS实现,但只是发现令人困惑的是R实现需要很长时间。任何想法如何使其更快或以更有效的方式实现算法非常感谢。
答案 0 :(得分:10)
我认为你可以使用rgeos
函数gSimplify
哪个接口GEOS::simplify
在帮助文件中,您将获得更多信息,例如这是标题
简化几何
说明
Function simplifies the given geometry using the Douglas-Peuker algorithm
沿着这条线使用你的数据应该这样做
require(rgeos)
require(rgdal)
gors <- readOGR(dsn = "/tmp/gor", layer = "GOR_st121")
system.time(gor_topo <- gSimplify(gors, tol = 0.01))
## user system elapsed
## 0.713 0.010 0.727
我有一个I7,但是我的规格不如你的那么令人印象深刻,所以我希望你试试这个功能会更快。