如何计算R中的多部分多边形的面积

时间:2018-09-18 15:17:01

标签: r gis shapefile area

在用R计算导入的shapefile的区域时遇到麻烦,该shapefile具有多部分多边形(一个要素包含两个单独的多边形)。我注意到ArcMap为shapefile的区域提供的值不同于raster::area。为了弄清楚哪个程序给了我正确的区域,我将shapefile分成了几个部分,然后重新计算了两个单独的多边形的面积:

library(raster)

> single_part <- shapefile("../Desktop/test/test_sp.shp")
> area(single_part)
[1] 575924.0 433409.8
> sum(area(single_part))
[1] 1009334
> 
> multi_part <-  shapefile("../Desktop/test/test_mp.shp")
> area(multi_part)
[1] 1018390

现在我意识到我已经知道了这个问题,我应该始终将面要素类分解为单个部分,但是没有人知道raster::area如何计算多部分面的面积吗?我也尝试使用rgeos::gArea,但得到了相同的结果。有没有一种方法可以计算R中多部分多边形的面积?

我想知道,因为它们很常见,我正尝试从在ArcMap中进行所有分析转换为R。

如果有帮助,这是shapefile的图像: multipart poly shapefile

编辑已添加2018年9月21日---------------------------------------- ---------------

这里是link to the shapefile test_mp.shp

据我所知,问题似乎源于R(相对于ArcMap)如何解释孔。查看ArcMap displayR display之间的区别。出于某种原因,R会将这些孔填充为shapefile的一部分,这一定是我对该面积进行不同计算的原因。 shapefile出问题了,或者我怎么导入它?

1 个答案:

答案 0 :(得分:0)

很显然,名为{multi_part'的对象只有一个(multi?)多边形,因为area返回一个值。我在这里说明如何调查您的追求:

library(raster)
d <- getData('GADM', country='Isle of Man', level=0)

area(d)
[1] 579672897

分成4个多边形(岛)

dd <- disaggregate(d)
a <- area(dd)
a
[1]     19424.12   2705442.41     25629.79 576922400.90
sum(a)
[1] 579672897

同一区域,没有理由不一样。除非可能与多边形孔混淆。没有您的数据很难发表评论。

您可以将这些对象写入磁盘(请参见下文),并查看ArcGIS为您提供的面积(但是请注意,此示例使用lon / lat坐标,我不确定ArcGIS是否可以计算这些对象上的面积)。

shapefile(d, "man.shp")

这是有孔或无孔的情况:

p1 <- rbind(c(-180,-20), c(-140,55), c(10, 0), c(-140,-60), c(-180,-20))
p2 <- rbind(c(-150,-20), c(-100,-10), c(-110,20), c(-150,-20))

# two (overlapping) polygons (no hole)   
pol1 <- spPolygons(p1, p2, crs="+proj=utm +zone=1 +datum=WGS84")
# single polygon with hole
pol2 <- spPolygons(list(p1, p2), crs="+proj=utm +zone=1 +datum=WGS84")

a <- area(pol1) / 10e+9
b <- area(pol2) / 10e+9

a
#[1] 10925   800
sum(a)
#[1] 11725
a[1]-a[2]
#[1] 10125

ba[1] - a[2]匹配,符合预期

b
#[1] 10125

使用“计算几何”为属性表中的字段使用ArcGIS获得完全相同的结果。