Мне нужно разместить случайные точки на каждом шейп-файле из списка шейп-файлов с помощью 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