所以我有多个物种范围,如下所示(例如蓝色)这个物种从东到西贯穿非洲:
我可以使用gArea
包中的rgeos
获取总面积。我想知道的是有多少个别多边形构成了这个文件 - 即总数范围有多少个不同的区域(这可能是岛屿,或者只是分开的种群)和这些多边形的范围是。我一直在使用以下代码:
#Load example shapefile
shp <- readShapeSpatial("species1.shp")
#How many polygon slots are there?
length(shp@polygons)
>2
#How many polygons are in each slot
length(shp@polygons[[1]]@Polygons
length(shp@polygons[[2]]@Polygons
并获得特定区域:
shp@polygons[[1]]@Polygons[[1]]@area
这是对的吗?我担心范围中间的湖泊可能会构成一个多边形吗?我想最终得到一个大致类似的列表:
Species A Species B
Polygon 1 12 11
Polygon 2 13 10
Polygon 2 14 NA
如果上面的代码是正确的,如果我想为每个物种编制一个列表,那么多少多边形及其各个范围将非常简单地传递给循环。
由于
答案 0 :(得分:2)
这是一个非常不光彩的解决方案,但它目前完成了工作。
for(i in 1:length(shpfiles)){
shp <- shpfiles[[i]]
#1) Create master list of all polygon files within a shapefile
#How many lists of polygons are there within the shpfile
num.polygon.lists <- length(shp@polygons)
#Get all polygon files
master <- vector(mode="list")
for(i in 1:num.polygon.lists){
m <- shp@polygons[[i]]@Polygons
master[[i]] <- m
}
#Combine polygon files into a single list
len <- length(master)
if(len > 1) {
root <- master[[1]]
for(i in 2:length(master)){
root <- c(master[[i]], root)}
} else {root <- master[[1]]}
#Rename
polygon.files <- root
#2) Count number of polygon files that are not holes
#Create a matrix for the total number of polygon slots that are going to be counted
res <- matrix(NA,ncol=1 , nrow=length(polygon.files))
#Loop through polygons returning whether slot "hole" is TRUE/FALSE
for(i in 1:length(polygon.files)){
r <- isTRUE(polygon.files[[i]]@hole)
res[[i,1]] <- r
}
#Count number times "FALSE" appears - means polygon is not a hole
p.count <- table(res)["FALSE"]
p.count <- as.numeric(p.count)
print(p.count)
}
这是一个开始
答案 1 :(得分:2)
我使用以下代码来找出每个&#34;行&#34;中有多少个多部分多边形。一个shapefile ......
sapply(shapefile @polygons,function(p)length(p @ Polygons))