繁体   English   中英

如何计算R中缓冲距离内点到多边形的距离

[英]How to calculate distance from points to multipolygons within a buffer distance in R

我有一个分布在巴西的 52,000 个点和森林遗迹地图(多边形格式)的文件。

我想要做的是计算从每个点到缓冲区内的每个森林片段的距离,例如,500m。 因此,如果我在 500m 的缓冲区内有 3 个片段,我希望计算从质心(焦点)到这些片段的所有三个距离(欧几里得)。

最后,我想取从每个焦点到各自片段的平均距离。

我尝试了“rgeos”包中的函数 gWithinDistance,如下所示:

Near_frag_500 <- gWithinDistance (points, veg_natural, 500, byid=T)

作为参数“指向”我的焦点和“veg_natural”我的森林残余多边形。 数字500指的是我要计算距离的500m的缓冲区。 但是,此函数的输出是具有 TRUE 或 FALSE 值的矩阵。 对于位于 500m 缓冲区内的多边形为 TRUE,对于位于 500m 缓冲区之外的多边形为 FALSE。 它没有给我计算出的距离的实际值。 我想我正在寻找的是相当于 ArcGIS 中的“生成近表”功能。

如果有人可以帮助我,我将不胜感激! 如果有任何使用光栅文件的解决方案,我也有我的森林残余多边形在光栅中。

我用 7 个点和 8 个多边形做了一个简单的测试集。 一切都必须以米为单位投影到笛卡尔系统,所以不是经纬度。 如果没有别的,请使用本地 UTM 区域。

我计算从点到多边形的距离矩阵:

> dmat = gDistance(points, veg_natural,byid=TRUE)

然后屏蔽掉超过 500 的任何东西,并计算行意味着:

> dmat[dmat>500]=NA
> apply(dmat, 1, mean, na.rm=TRUE)
       0        1        2        3        4        5        6        7 
331.5823 262.7129 380.2073 187.2068 111.9961      NaN 224.6962 360.7995 

这是每个点到 500m 内最近要素的距离的平均值。 请注意点 5 的 NaN,这是因为它距离任何多边形要素都不是 500m。

如果这个矩阵对于您的 52,000 个点(和 ?? 多边形?)来说太大了,那么只需在循环中一次执行 1000 个点,或者您的计算机可以处理的任何内容。 我认为我的会以 52,000 失败。

如果您想知道哪些多边形是每个点 500m 内的多边形,则类似于:

> apply(dmat,1, function(r){which(!is.na(r))})
$`0`
5 6 
5 6 

$`1`
4 5 7 
4 5 7 

显示我的第一个点(标记为 0)靠近多边形 5 和 6。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM