了解软件包geosphere的areaPolygon()输出

Seb*_*Seb 3 r geosphere

这个问题中,我得到了一个很棒的函数areaPolygon(),它给了我一个多边形坐标内的面积。但是,当我尝试使用该函数时,计算结果似乎很奇怪:

我首先创建两个点

 require(fields)
 coords <- c(11.3697193956209, 47.233380520521, 11.3723606043791, 
 47.235179479479)
 coords <- matrix(coords, nrow=2, ncol=2, byrow=TRUE)
Run Code Online (Sandbox Code Playgroud)

然后检查这两者之间的距离:

 rdist.earth(coords,coords,miles=FALSE)[1,2]
Run Code Online (Sandbox Code Playgroud)

获得:0.2827821公里(将是矩形的对角线)

我继续创建一个矩形

 polygon <- matrix(coords, nrow=2, ncol=2)
 polygon <- rbind(polygon, polygon)
 polygon[4,2] <- polygon[1,2]
 polygon[4,1] <- polygon[2,1]
 polygon[3,2] <- polygon[2,2]
 polygon[3,1] <- polygon[1,1]
 polygon <- rbind(polygon, polygon[1,])
Run Code Online (Sandbox Code Playgroud)

看看这看起来是否不错: plot(polygon)

第四步:计算多边形内的面积。

geosphere::areaPolygon(polygon)
[1] 31.99288 #from the help file I know this ought to be square metres.
Run Code Online (Sandbox Code Playgroud)

但是,我可以预料到,200*200=40000 m²因为我的矩形的边长是200 x 200米。可以通过检查

rdist.earth(polygon,coords,miles=FALSE)

           [,1]         [,2]
 [1,] 0.0000000 2.827821e-01
 [2,] 0.2827821 9.504539e-05
 [3,] 0.2002671 1.996434e-01
 [4,] 0.1996501 2.002671e-01
Run Code Online (Sandbox Code Playgroud)

所以现在问我的问题(最后)是我做错了什么?非常感谢您的帮助!

Spa*_*man 5

您创建了无效的多边形!如果与它一起绘制,type="l"则会看到领结:

> plot(polygon,type="l")
Run Code Online (Sandbox Code Playgroud)

领结的一半将为负值,另一半为正值,因此您得到的结果是两半大小的差异。因为地球是球形的,所以它们不会完全相同...

您只需要对中的点重新排序polygon