首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么R对Douglas-Peucker算法的实现如此缓慢?

为什么R对Douglas-Peucker算法的实现如此缓慢?
EN

Stack Overflow用户
提问于 2013-06-20 23:14:09
回答 1查看 1.8K关注 0票数 4

绘制地理多边形不是R的强项,但如果使用done well,它将非常有用。我使用的是来自英国的数据,多边形边框中的细节高得离谱,这使得任何绘图或操作函数(特别是在运行了fortify使其可以进行ggplot之后)变得很慢。

合乎逻辑的方法是简化多边形几何图形,使它们不那么复杂。

我遵循这个post在R中实现了Douglas-Peucker算法,但它非常慢。应用于this dataset (英格兰地区),以下代码在内存为16 Gb的英特尔®酷睿™i7-3630QM计算机上运行大约10分钟:

代码语言:javascript
复制
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实现花费了这么长的时间。任何想法如何使它更快或以更有效的方式实现算法,非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-21 00:56:15

嗯,我想你可以使用rgeos函数gSimplify,它接口GEOS::simplify

在帮助文件中,您将获得更多信息,例如,这是标题

简化几何体

描述:

函数使用Douglas-Peuker算法简化给定的几何图形

使用你的数据这条线应该可以做到这一点

代码语言:javascript
复制
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,但我的规范没有你的那么令人印象深刻,所以我希望当你尝试它时,这个函数会更快。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17217413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档