对于R中的多个多边形,从Lat / Lon矩阵计算面积或在50%轮廓内计算面积

时间:2014-01-14 17:36:12

标签: r coordinates geospatial area contour

我想从内核密度(kde2d)的不同轮廓线中找到多个多边形的总面积。 这是核密度和50%等高线的图像。如何计算50%等高线内的面积?

我还创建了一个lat lon坐标矩阵,它表示这个50%等高线内的点。使用这些点计算总面积会更容易吗?

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:3)

在笛卡尔系统中得到坐标并使用这些坐标完成内核平滑后,可以使用contourLines函数获取直线坐标,然后使用areapl函数从splancs包中计算每个简单环的区域。

例如,使用help(kde2d)中的示例:

attach(geyser)

plot(duration, waiting, xlim = c(0.5,6), ylim = c(40,100))
f1 <- kde2d(duration, waiting, n = 50, lims = c(0.5, 6, 40, 100))
image(f1)
contour(f1)

这样我们的数据设置 - 假设我们想要0.008个轮廓中的区域:

C8 = contourLines(f1,level=0.008)
length(C8)
[1] 3

现在C8是一个长度为3的列表。我们需要在每个上面应用areapl函数:

> sapply(C8,function(ring){areapl(cbind(ring$x,ring$y))})
[1] 14.65282 12.27329 14.75005

我们显然可以总结:

> sum(sapply(C8,function(ring){areapl(cbind(ring$x,ring$y))}))
[1] 41.67617

现在,只有坐标是笛卡尔坐标,并且轮廓线是完整的循环才有意义。如果0.008轮廓靠近边缘,则轮廓可能被夹到边界框,然后发生坏事。至少检查每个环的最后一个点是否与第一个环相同。