r - R中点要素到最近多边形的距离

标签 r polygon distance point nearest-neighbor

我目前在做一个项目,我有一个点特征——点特征包括 142 个点——和多个多边形(大约 10 个)。我想计算 R 中每个点和最近的多边形特征之间的距离。

我目前的方法很乏味,而且有点啰嗦。我目前正计划计算每个点和每个多边形之间的距离。例如,我将计算 142 个点与多边形 A 之间的距离、142 个点与多边形 B 之间的距离、142 个点与多边形 C 之间的距离等。这是这些距离计算之一的示例代码:

dist_cen_polya <- dist2Line(centroids_coor, polygonA_shp)

完成这些计算后,我会编写一个代码来选择每个点和最近的多边形之间的最小/最近距离。问题是这个过程很乏味。

有谁知道可以最大限度地减少计算工作量/计算时间的包/代码?我真的很想使用一个包,将单个点与最近的多边形特征进行比较或计算一个点与所有感兴趣的多边形之间的距离?

谢谢你。

最佳答案

这里我使用的是 gDistance rgeos 拓扑库中的函数。我正在使用蛮力双循环,但速度惊人。 142 个点和 10 个多边形只需不到 2 秒。我确信有一种更优雅的方式来执行循环。

   require(rgeos)

    # CREATE SOME DATA USING meuse DATASET
    data(meuse)
      coordinates(meuse) <- ~x+y
        pts <- meuse[sample(1:dim(meuse)[1],142),]  
    data(meuse.grid) 
      coordinates(meuse.grid) = c("x", "y") 
        gridded(meuse.grid) <- TRUE 
          meuse.grid[["idist"]] = 1 - meuse.grid[["dist"]]    
        polys <- as(meuse.grid, "SpatialPolygonsDataFrame")
          polys <- polys[sample(1:dim(polys)[1],10),]   
    plot(polys)
      plot(pts,pch=19,cex=1.25,add=TRUE)      

    # LOOP USING gDistance, DISTANCES STORED IN LIST OBJECT
    Fdist <- list()
      for(i in 1:dim(pts)[1]) {
        pDist <- vector()
          for(j in 1:dim(polys)[1]) { 
            pDist <- append(pDist, gDistance(pts[i,],polys[j,])) 
          }
        Fdist[[i]] <- pDist
      } 

    # RETURN POLYGON (NUMBER) WITH THE SMALLEST DISTANCE FOR EACH POINT  
    ( min.dist <- unlist(lapply(Fdist, FUN=function(x) which(x == min(x))[1])) ) 

    # RETURN DISTANCE TO NEAREST POLYGON
    ( PolyDist <- unlist(lapply(Fdist, FUN=function(x) min(x)[1])) ) 

    # CREATE POLYGON-ID AND MINIMUM DISTANCE COLUMNS IN POINT FEATURE CLASS
    pts@data <- data.frame(pts@data, PolyID=min.dist, PDist=PolyDist)

    # PLOT RESULTS
    require(classInt)
    ( cuts <- classIntervals(pts@data$PDist, 10, style="quantile") )
       plotclr <- colorRampPalette(c("cyan", "yellow", "red"))( 20 )
         colcode <- findColours(cuts, plotclr)
    plot(polys,col="black")
      plot(pts, col=colcode, pch=19, add=TRUE)

min.dist 向量表示多边形的行号。例如,您可以通过使用此向量来对最近的多边形进行子集化。
near.polys <- polys[unique(min.dist),]

PolyDist 向量包含要素投影单位中的实际笛卡尔最小距离。

关于r - R中点要素到最近多边形的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448402/

相关文章:

r - 使用 lm() 进行线性回归 - 对结果感到惊讶

r - 构建组中所有值的列表并应用于整个组

r - 带有示例代码的 Jupyter R Plotly 404 错误

performance - OpenGL - 不绘制完全遮挡的多边形?

r - 从 rlang 0.3.0 和 mutate_impl 起已失效

algorithm - 如何在 MATLAB 中根据无序边数据创建填充多边形?

c++ - 如何从一组线段创建封闭区域(凸多边形)?

r - 为什么 geoshere 给出错误的距离?

python - 如何加快距离矩阵计算?

mysql - 与他人保持特定距离进入