5

地理的なポリゴンをプロットすることは R の強みではありませんが、うまくやれば非常にやりがいがあります。私は英国からのデータを使用していますが、ポリゴンの境界線の詳細が途方もなく高く、プロットまたは操作機能が遅くなります (特に、強化を実行して ggplot 対応にした後)。

論理的なアプローチは、ポリゴン ジオメトリを単純化して、複雑さを軽減することです。

この投稿に従って、Douglas-Peucker アルゴリズムを実装して R でこれを実行しましたが、非常に遅かったです。このデータセット(イングランドの地域) に適用すると、16 Gb の RAM を搭載した Intel® Core™ 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では、同じ機能に約 1 秒かかりました。もちろん、将来的には QGIS の実装を使用することになるでしょうが、R の実装には非常に長い時間がかかることに戸惑いました。より高速にする方法や、より効率的な方法でアルゴリズムを実装する方法についてのアイデアは大歓迎です。

4

1 に答える 1

10

GEOS::simplifyとインターフェイスするrgeos関数を使用できると思いますgSimplify

ヘルプ ファイルには、より多くの情報があります。たとえば、これはヘッダーです。

ジオメトリを単純化

説明:

 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 を持っていますが、私のスペックはあなたのものよりも印象的ではないので、試してみるとこの機能がより高速になることを期待しています。

于 2013-06-20T16:56:14.983 に答える