从这个问题中,我得到了一个很棒的函数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)
所以现在问我的问题(最后)是我做错了什么?非常感谢您的帮助!
您创建了无效的多边形!如果与它一起绘制,type="l"则会看到领结:
> plot(polygon,type="l")
Run Code Online (Sandbox Code Playgroud)
领结的一半将为负值,另一半为正值,因此您得到的结果是两半大小的差异。因为地球是球形的,所以它们不会完全相同...
您只需要对中的点重新排序polygon。