Пространственное пересечение многоугольников - несколько получаемых многоугольников - PullRequest
0 голосов
/ 17 февраля 2020

Я работаю на пересечении многоугольников, используя R пространственных инструментов rgeos::gIntersection и / или raster::intersect. В моем случае результатом пересечения являются два многоугольника из-за формы одного из многоугольников (Lpoly), используемых для пересечения. Тем не менее, из функции summary(), похоже, создается только одна функция ?! Как я могу получить доступ к двум геометриям, полученным в результате процесса пересечения? Кроме того, я хотел бы выбрать только один из полученных многоугольников на основе критерия покрытия конкретной пространственной точки (пары координат):

A <- c(0,0)
B <- c(0,3)
C <- c(2,3)
D <- c(2,1)
E <- c(3,1)
F <- c(3,3)
G <- c(5,3)
H <- c(5,0)
Lpoly <- SpatialPolygons(list(Polygons(list(Polygon(rbind(A,B,C,D,E,F,G,H))),1)))
plot(Lpoly)

A2 <- c(1,2)
B2 <- c(1,3)
C2 <- c(4,3)
D2 <- c(4,2)
intersect_poly <-  SpatialPolygons(list(Polygons(list(Polygon(rbind(A2,B2,C2,D2))),1)))
plot(intersect_poly,col="red",add=T) 

i <- intersect(Lpoly,intersect_poly)
i_rgeos <- rgeos::gIntersection(Lpoly,intersect_poly)
summary(i_rgeos)

plot(i_rgeos,add=T,col="green")

Как выбрать только один многоугольник и / или получить уникальные объекты для каждый полученный полигон? Как я могу получить доступ к полученному многоугольнику, который также покрывает координаты c(1.5,2.5)?

Подход к решению № 1: Я нашел решение на основе:

i_rgeos <- disaggregate(i_rgeos)
i_rgeos <- i_rgeos[as.vector(which(over(i_rgeos,p)>0)),] #where p = spatial point of interest

1 Ответ

1 голос
/ 17 февраля 2020

Не уверен в rgeos, как это сделать, но используя пакет sf, мы можем легко приводить шейп-файлы к различным типам, в данном случае от MULTIPOLYGON к POLYGON, нам просто нужно сначала привести i_rgeos к простая функция.

library(sf)

st_as_sf(i_rgeos) %>% st_cast("POLYGON")
#> Simple feature collection with 2 features and 0 fields
#> geometry type:  POLYGON
#> dimension:      XY
#> bbox:           xmin: 1 ymin: 2 xmax: 4 ymax: 3
#> epsg (SRID):    NA
#> proj4string:    NA
#>                         geometry
#> 1 POLYGON ((1 3, 2 3, 2 2, 1 ...
#> 2 POLYGON ((3 2, 3 3, 4 3, 4 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...