空间多边形相交 - 多个结果多边形
Spatial polygon intersection - multiple resulting polygons
我正在使用 R 空间工具处理多边形的交集 rgeos::gIntersection
and/or raster::intersect
。在我的例子中,由于用于交叉的多边形之一 (Lpoly
) 的形状,交叉的结果是两个多边形。但是,从 summary()
函数看来,它只创建了一项功能?!如何访问相交过程产生的两个几何图形?此外,我只想 select 基于覆盖特定空间点(坐标对)的标准生成的多边形之一:
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")
如何 select 只有一个多边形 and/or 为每个生成的多边形获得独特的特征?如何访问也覆盖坐标 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
不确定 rgeos
怎么做,但是使用 sf
包,我们可以轻松地将 shapefile 转换为不同的类型,在这种情况下,从 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 ...
我正在使用 R 空间工具处理多边形的交集 rgeos::gIntersection
and/or raster::intersect
。在我的例子中,由于用于交叉的多边形之一 (Lpoly
) 的形状,交叉的结果是两个多边形。但是,从 summary()
函数看来,它只创建了一项功能?!如何访问相交过程产生的两个几何图形?此外,我只想 select 基于覆盖特定空间点(坐标对)的标准生成的多边形之一:
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")
如何 select 只有一个多边形 and/or 为每个生成的多边形获得独特的特征?如何访问也覆盖坐标 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
不确定 rgeos
怎么做,但是使用 sf
包,我们可以轻松地将 shapefile 转换为不同的类型,在这种情况下,从 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 ...