spsample()でシェイプファイルのリストから各シェイプファイルにランダムな点を配置する必要があります。いくつかの不規則なシェイプファイルについては、これは長いプロセスであることが証明されているので、私はspsample()のトラブルメーカである小さな遠隔ポリゴンをドロップすることによって単純にシェイプファイルを作成する必要があります。spsample()でランダムな点を配置するためのシェイプファイルを簡素化
これについては、各ポリゴンのサイズとそれ以外のすべてのポリゴンとの平均距離を知る必要があります。私はこの計算を高速化する方法を探しています、おそらくよりエレガントな(そしてより速い)方法で行うことができます。次のような試みは機能しますが、単純化アルゴリズムとしては時間がかかります。
#program tries to place random points on shapefile shapes[[i]] if it fails after 300 seconds it goes though to simplifying part and swaps the old shapefile with a simplified version.
d <- shapes[[i]]
Fdist <- list()
for(m in 1:dim(d)[1]) {
pDist <- vector()
for(n in 1:dim(d)[1]) {
pDist <- append(pDist, gDistance(d[m,],d[n,]))
}
Fdist[[m]] <- pDist
[email protected]$mean[m]<-mean(Fdist[[m]])
[email protected]$gArea[m]<-gArea(d[m,])
}
#drop small and remote polygons
d.1<-d[[email protected]$gArea>=quantile([email protected]$gArea, prob = seq(0, 1, length=11), type=5)[[1]] & ([email protected]$mean<=quantile([email protected]$mean, prob = seq(0, 1, length=11), type=5)[[10]]),]
#replace with simplified polygon
shapes[[i]]<-d.1
私はどんな提案にも感謝します。
おかげフィル!私はsm_simplifyとベクトル化の両方を適用しました。 – Juta
@juta本当に助けてうれしい! – Phil