Как объединить объекты, содержащиеся в шейп-файле, на основе условия в R - PullRequest
0 голосов
/ 05 марта 2020

Я прикрепил шейп-файл (sample) с 4 объектами, и у каждого из них есть gap, out, in в поле type (см. Таблицу атрибутов). Я хотел бы объединить элемент gap с соседним многоугольником, который имеет максимальную площадь (в этом случае gap будет объединен с in). Мой окончательный шейп-файл будет иметь 3 функции (без gap). Как мне сделать это в R?

В ArcGIS есть прямой инструмент для объединения объектов. Я хотел знать, как мы это делаем в R.

Вот ссылка на шейп-файл This is a sample shapefile in which there are 4 features

This is the legend to the respective shapefile

This is the attribute table for the shapefile

Я использовал библиотеку rgeos, чтобы определить соседний полигон с максимальной площадью. Это мой код Я не могу понять, как объединить эту функцию с функцией gap.

library(rgeos)
adj_mat <- gTouches(shp, byid=TRUE)
a <- adj_mat[which(shp@data$type=="gap"),]
area <- shp@data$SHAPE_Area[which(a=="TRUE")]
final_matching_id <- which(area==max(area))
f_gap <- shp@data[final_matching_id+1,]
f_gap

  OBJECTID SHAPE_Leng SHAPE_Area type
3       13   1.527046 0.09469124   in

1 Ответ

1 голос
/ 05 марта 2020

gUnion и spRbind может решить вашу проблему.

merged_d <- gUnion(shp[which(shp@data$type=="gap"),], shp[final_matching_id+1,])
not_related_d <- shp[c(1:4)[-c(which(shp@data$type=="gap"), final_matching_id+1)],]

shp2 <- spRbind(merged_d, not_related_d)

plot(shp2, col = 2:4)

enter image description here

...