R 按面积过滤形状文件多边形

R 按面积过滤形状文件多边形,r,gis,sp,sf,R,Gis,Sp,Sf,我有以下英国的边界数据集,其中显示了所有县: library(raster) library(sp) library(ggplot) # Download the data GB <- getData('GADM', country="gbr", level=2) 然而,如下图所示,有许多小岛会扭曲比例尺数据范围: 关于如何将数据集优雅地子集到最小大小,您有什么想法吗?最好有与子集参数一致的格式。例如: GB_sub <- subset(UK, Area > 20) #

我有以下英国的边界数据集,其中显示了所有县:

library(raster)
library(sp)
library(ggplot)

# Download the data
GB <- getData('GADM', country="gbr", level=2)
然而,如下图所示,有许多小岛会扭曲比例尺数据范围:

关于如何将数据集优雅地子集到最小大小,您有什么想法吗?最好有与子集参数一致的格式。例如:

GB_sub <- subset(UK, Area > 20) # specify minimum area in km^2
GB_sub 20)#指定最小面积,单位为km^2

这是一个潜在的解决方案:

GB_sub = GB[sapply(GB@polygons, function(x) x@area>0.04),] # select min size
map.df <- fortify(GB_sub)
ggplot(map.df, aes(x=long, y=lat, group=group)) + geom_polygon()

这是一个潜在的解决方案:

GB_sub = GB[sapply(GB@polygons, function(x) x@area>0.04),] # select min size
map.df <- fortify(GB_sub)
ggplot(map.df, aes(x=long, y=lat, group=group)) + geom_polygon()

这是另一个可能的解决方案。由于您的数据处于lat-long投影中,因此直接基于纬度和经度计算面积会导致偏差,因此最好基于
geosphere
包中的函数计算面积

install.packages("geosphere")
library(geosphere)

# Calculate the area
GB$poly_area <- areaPolygon(GB) / 10^6

# Filter GB based on area > 20 km2
GB_filter <- subset(GB, poly_area > 20)
install.packages(“geosphere”)
图书馆(地球圈)
#计算面积
GB$poly_面积20平方公里
GB_过滤器(20)

多边形面积
包含所有多边形的面积(以平方公里为单位)。我们可以通过一个阈值来过滤多边形,例如您的示例中的
20
GB\u过滤器是最终输出。

这里是另一个可能的解决方案。由于您的数据处于lat-long投影中,因此直接基于纬度和经度计算面积会导致偏差,因此最好基于
geosphere
包中的函数计算面积

install.packages("geosphere")
library(geosphere)

# Calculate the area
GB$poly_area <- areaPolygon(GB) / 10^6

# Filter GB based on area > 20 km2
GB_filter <- subset(GB, poly_area > 20)
install.packages(“geosphere”)
图书馆(地球圈)
#计算面积
GB$poly_面积20平方公里
GB_过滤器(20)

多边形面积
包含所有多边形的面积(以平方公里为单位)。我们可以通过一个阈值来过滤多边形,例如您的示例中的
20
<代码>GB_过滤器
是最终输出。

您可以使用另一个英国大陆光栅对其进行裁剪。这篇文章可能会有帮助。你可以用另一幅英国大陆的光栅图来裁剪它。这篇文章可能会很有帮助。读了一点后,
x@area
对于带有孔的形状文件可能会有问题。然而,在这种情况下,这不是问题。是的,我的答案中的链接非常准确地描述了这个特定的问题x@area对于带有孔的形状文件可能会有问题。然而,在这种情况下,这不是一个问题。是的,我的答案中的链接很好地描述了这个问题