绘制地理多边形不是R的强项,但如果使用done well,它将非常有用。我使用的是来自英国的数据,多边形边框中的细节高得离谱,这使得任何绘图或操作函数(特别是在运行了fortify使其可以进行ggplot之后)变得很慢。
合乎逻辑的方法是简化多边形几何图形,使它们不那么复杂。
我遵循这个post在R中实现了Douglas-Peucker算法,但它非常慢。应用于this dataset (英格兰地区),以下代码在内存为16 Gb的英特尔®酷睿™i7-3630QM计算机上运行大约10分钟:
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实现花费了这么长的时间。任何想法如何使它更快或以更有效的方式实现算法,非常感谢。
发布于 2013-06-21 00:56:15
嗯,我想你可以使用rgeos函数gSimplify,它接口GEOS::simplify
在帮助文件中,您将获得更多信息,例如,这是标题
简化几何体
描述:
函数使用Douglas-Peuker算法简化给定的几何图形
使用你的数据这条线应该可以做到这一点
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,但我的规范没有你的那么令人印象深刻,所以我希望当你尝试它时,这个函数会更快。
https://stackoverflow.com/questions/17217413
复制相似问题