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

时间:2016-04-24 17:16:44

标签: r gis distance arcgis-js-api

我在巴西分发了一个52,000分的文件和一个森林残余地图(多边形格式)。

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

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

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

  

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

成为争论点“点”我的焦点和“veg_natural”我的森林残余多边形。数字500指的是我想要计算距离的500米的缓冲区。但是,此函数的输出是具有TRUE或FALSE值的矩阵。对于那些落在500米缓冲区内的多边形是真的,对于那些落在500米缓冲区之外的多边形是假的。它没有给出我计算的距离的实际值。我想我想要的是与ArcGIS中的“Generate Near Table”功能等效。

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

1 个答案:

答案 0 :(得分:1)

我做了一个简单的测试集,包含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 

这是500米范围内从每个点到最近特征的距离的平均值。注意点5的NaN,因为它距离任何面要素都不是500米。

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

如果你想知道哪个多边形是每个点500米内的多边形,那么类似:

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

$`1`
4 5 7 
4 5 7 

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