从包geosphere了解`areaPolygon()`的输出

时间:2012-09-28 07:45:09

标签: r geosphere

this Question我获得了很棒的函数areaPolygon(),它给出了坐标多边形内的区域。然而,当我试验这个函数时,计算看起来很奇怪:

我首先创建一组两点

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

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

 rdist.earth(coords,coords,miles=FALSE)[1,2]

获得: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,])

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

第四步:我计算多边形内的区域。

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

然而,我本来期望200*200=40000 m²,因为我的纠结的两侧是200乘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

现在回答我的问题(最后)我做错了什么?非常感谢你的帮助!

1 个答案:

答案 0 :(得分:5)

你做了一个无效的多边形!如果你用type="l"绘制它,你会看到一个领结:

> plot(polygon,type="l")

一半的蝴蝶结将具有负面积,另一半为正面,因此您的结果是两半尺寸的差异。由于地球是球形的,它们不会完全一样......

您只需要在polygon中重新排序点数。