Пространственный эквивалент rbindlist? - PullRequest
0 голосов
/ 16 мая 2018

Мне нужно в цикле связать загрузку SpatialPolygonDataFrames.Они создаются путем буферизации файла дорог.Однако, поскольку мой «дорожный» файл класса SpatialLinesDataFrame имеет длину 15000 строк, функция rbind становится все медленнее.Если бы это были фреймы данных, я бы использовал rblindlist, чтобы ускорить процесс.Но это не работает с объектами sp (верно?).У кого-нибудь есть хорошая идея?

for (i in 1:nrow(roads)) {

  temp <- gDifference(gBuffer(roads[i,], byid = T, width =  15, capStyle = 'ROUND'), 
                  gBuffer(roads[i,], byid = T, width =  10, capStyle = 'ROUND'))

  slot(slot(temp, "polygons")[[1]], "ID") <- as.character(roads[i,]$oid)

  if (i == 1) {difference <- temp}

  if (i > 1) {difference <- rbind(difference, temp)}

  rm(temp)
  print(i)

}

Спасибо

Джеймс

1 Ответ

0 голосов
/ 16 мая 2018

Я не уверен, что вам вообще нужно зацикливаться.Вы можете использовать пакет sf.Вот пример того, чего (я думаю) вы хотите достичь:

library(mapview) # for the example lines data
library(sf)
trails$diff = st_geometry(st_buffer(trails, dist = 1500)) / st_geometry(st_buffer(trails, 1000))
mapview(trails$diff)

Это ваш желаемый результат?Если нет, вы можете привести воспроизводимый пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...