从一个形状文件中消除所有的多边形,只保留一个。

3
我希望能从一个形状文件中保留一个多边形,而将其余的全部消除。有什么方法可以实现吗?
以下是一个可复制的示例:
library(rgeos)
library(UScensus2000tract)

# load data
  data("oregon.tract")

# plot map
  plot(oregon.tract)

enter image description here

# Dissolve all polygons
  d <- gUnaryUnion(oregon.tract, id = oregon.tract@data$state)
  plot(d)

enter image description here

在这个例子中,是否可能通过保留道路编号9501来溶解多边形?
1个回答

3
我想这是你想要的内容。如果你想将地块的连续成员合并在一起,稍有不同,但你只需要从多边形中删除第一个元素(整个州),然后对剩余部分运行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,这里有一种简单的方法:

# 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) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接