【问题标题】:How to calculate distance from points to multipolygons within a buffer distance in R如何计算R中缓冲距离内点到多面体的距离
【发布时间】:2016-04-24 17:16:44
【问题描述】:

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

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

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

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

near_frag_500

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

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

【问题讨论】:

    标签: r gis distance arcgis-js-api


    【解决方案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 
    

    这是从每个点到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。

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 2010-11-20
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      相关资源
      最近更新 更多