我在巴西分发了一个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”功能等效。
如果有人可以帮助我,我真的很感激!如果使用光栅文件有任何解决方案,我也会在光栅中有我的森林残余多边形。
答案 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。