溶解除形状文件中的一个以外的所有多边形
Dissolve all polygons but one from a shape file
我想从形状文件中溶解除一个以外的所有多边形。有办法吗?
这是一个可重现的例子:
library(rgeos)
library(UScensus2000tract)
# load data
data("oregon.tract")
# plot map
plot(oregon.tract)
# Dissolve all polygons
d <- gUnaryUnion(oregon.tract, id = oregon.tract@data$state)
plot(d)
在此示例中,是否可以通过保留区域编号 9501 来分解多边形?
我想这就是您要找的。如果你想将 tract 的连续成员合并在一起,这会略有不同,但你所要做的就是从多边形中删除第一个元素(整个州),然后 运行 gUnaryUnion 在其余部分,和然后将连续的区域成员重新添加到 gUnaryUnion 化状态的副本。
oregon = oregon.tract
names(attributes(oregon.tract))
#[1] "bbox" "proj4string" "polygons" "plotOrder" "data"
#[6] "class"
selected_tract_indices = which(oregon.tract@data$tract == 9501)
oregon <- gUnaryUnion(oregon.tract, id = oregon.tract@data$state)
d = oregon
npolygons = 1
for (selected_tract_index in selected_tract_indices){
d@polygons[[npolygons+1]] = oregon.tract@polygons[[selected_tract_index]]
npolygons = npolygons + 1
d@plotOrder=c(d@plotOrder,as.integer(npolygons))
}
plot(d)
这个操作的输出是一个SpatialPolygon。如果您想将其转换回 SpatialPolygonDataDrame,here 是一种简单的方法:
# Extract polygon ID's
( did <- sapply(slot(d, "polygons"), function(x) slot(x, "ID")) )
# Create dataframe with correct rownames
( d.df <- data.frame( ID=1:length(d), row.names = did) )
# Try coersion again and check class
d <- SpatialPolygonsDataFrame(d, d.df)
class(d)
我想从形状文件中溶解除一个以外的所有多边形。有办法吗?
这是一个可重现的例子:
library(rgeos)
library(UScensus2000tract)
# load data
data("oregon.tract")
# plot map
plot(oregon.tract)
# Dissolve all polygons
d <- gUnaryUnion(oregon.tract, id = oregon.tract@data$state)
plot(d)
在此示例中,是否可以通过保留区域编号 9501 来分解多边形?
我想这就是您要找的。如果你想将 tract 的连续成员合并在一起,这会略有不同,但你所要做的就是从多边形中删除第一个元素(整个州),然后 运行 gUnaryUnion 在其余部分,和然后将连续的区域成员重新添加到 gUnaryUnion 化状态的副本。
oregon = oregon.tract
names(attributes(oregon.tract))
#[1] "bbox" "proj4string" "polygons" "plotOrder" "data"
#[6] "class"
selected_tract_indices = which(oregon.tract@data$tract == 9501)
oregon <- gUnaryUnion(oregon.tract, id = oregon.tract@data$state)
d = oregon
npolygons = 1
for (selected_tract_index in selected_tract_indices){
d@polygons[[npolygons+1]] = oregon.tract@polygons[[selected_tract_index]]
npolygons = npolygons + 1
d@plotOrder=c(d@plotOrder,as.integer(npolygons))
}
plot(d)
这个操作的输出是一个SpatialPolygon。如果您想将其转换回 SpatialPolygonDataDrame,here 是一种简单的方法:
# Extract polygon ID's
( did <- sapply(slot(d, "polygons"), function(x) slot(x, "ID")) )
# Create dataframe with correct rownames
( d.df <- data.frame( ID=1:length(d), row.names = did) )
# Try coersion again and check class
d <- SpatialPolygonsDataFrame(d, d.df)
class(d)