Как подразделить один набор пространственных данных в несколько наборов пространственных данных на основе имени объекта в R - PullRequest
1 голос
/ 01 октября 2019

У меня есть пространственный набор данных, полилиния, который содержит 115 линейных объектов, и я пытаюсь выяснить, можно ли выбрать и сохранить каждый линейный объект в отдельных файлах фигур с помощью цикла или аналогичной функции?

Я понимаю, как сделать это индивидуально, используя подмножество (пример ниже), однако повторение этого процесса 115 раз кажется пустой тратой времени и мощью R.

Я привожу пример приведенных ниже данных:

trailname <- ("trail1", "trail2", "trail3")
trailtype <- ("mountain", "flat", "hilly")
parking <- ("no", "yes", "no")
shapelength <- ("835", "5728", "367")
trails <- data.frame(accessname, trailtype, parking, shapelength)

Вот пример одного подмножества:

trail1 <- subset(trails, trailname == "trail1")

Я хотел бы выбрать каждый трейл и сохранить его как имя, которое отображается в столбце «имя трейла», т.е. trail1.shp

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Существует пакет R под названием ShapePattern. Посмотрите на функцию shpsplitter. Кажется, делать то, что вы хотите. В противном случае вы можете сделать это в другом программном обеспечении ГИС, см. Здесь https://gis.stackexchange.com/questions/25709/splitting-shapefile-into-separate-files-for-each-feature-using-qgis-gdal-saga

0 голосов
/ 02 октября 2019

В базе R, не могли бы вы использовать функцию assign в цикле for, чтобы сделать это?

trailname <- c("trail1", "trail2", "trail3")
trailtype <- c("mountain", "flat", "hilly")
parking <- c("no", "yes", "no")
shapelength <- c("835", "5728", "367")
trails <- data.frame(trailname, trailtype, parking, shapelength)


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

name <- as.character(trails$trailname[[i]])

assign( name, subset(trails, trailname == trails$trailname[[i]]) )

}

РЕДАКТИРОВАТЬСЯ К ОТВЕТУ ОТ OP

Это должно быть выполнимо с помощью нескольких настроек. Следует отметить, что приведенный вами пример представляет собой фрейм данных, а функция writeOGR принимает ...

SpatialPointsDataFrame, SpatialLinesDataFrame или SpatialPolygonsDataFrame, как определено в пакете sp.

У объектов этого типа есть фреймы данных, но также есть и другие атрибуты, которые могут представлять интерес. Давайте предположим, что ваши данные относятся к одному из этих принятых типов. Я буду использовать данные rgdal городов в качестве примера. Если все, что нам нужно, это сохранить файлы вне нашего сеанса R, пропустите функцию assign и перетащите subset в функцию writeOGR:

library('rgdal')

#loading in data
cities <- readOGR(system.file("vectors", package = "rgdal")[1], "cities")

#taking only first two rows for this example
shap <- cities[1:2,]

 #where you want to save these files. This places it on your current working directory
location <- getwd()[[1]]

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

  # name of file
   name <- as.character(shap$NAME[[i]])

 # change shap to your 'SpatialPointsDataFrame' 
 writeOGR(subset(shap, NAME == shap$NAME[[i]]), location, name , driver="ESRI Shapefile")

}
...