gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:52:17 24 4
gpt4 key购买 nike

绘制地理多边形不是 R 的强项,但如果 done well 会很有收获.我使用的是来自英国的数据,多边形边界中的细节高得离谱,这使得任何绘图或操作功能(尤其是在运行 fortify 以使其可 ggplot 之后)都很慢。

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

我关注了这个post在 R 中实现 Douglas-Peucker 算法来执行此操作,但速度非常慢。适用于this dataset (英格兰地区),以下代码在我配备 16 Gb RAM 的英特尔® 酷睿™ 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 实现花费的时间太长了,这让我感到困惑。非常感谢任何如何使其更快或以更有效的方式实现算法的想法。

最佳答案

嗯,我想你可以使用 rgeos 函数 gSimplify which interface GEOS::simplify

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

Simplify Geometry

Description:

 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,但我的规范没有你的那么令人印象深刻,所以我希望这个功能在你尝试时会更快。

关于r - 为什么 R 对 Douglas-Peucker 算法的实现如此缓慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17217413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com