【问题标题】:R Calculate distance between two points in British National GridR计算英国国家网格中两点之间的距离
【发布时间】:2020-07-13 16:12:59
【问题描述】:

我想计算数据集中每一行中两组英国国家网格坐标之间的距离(即我的示例中每一行的 AreaA 和 AreaB 之间的距离),以公里为单位。

library("sf")                 
                                  
BBox <- st_bbox(c(xmin = -10000, xmax = 15000, ymax = 20000, ymin = -5000), crs = st_crs(27700)) %>% st_as_sfc()                              
P1 <- st_sample(BBox, 50, exact = TRUE)                               
P2 <- st_sample(BBox, 50, exact = TRUE)                                   
                                        
Points <- data.frame(AreaA=sample(110:190,50,replace=FALSE),AreaB=sample(10:90,50,replace=FALSE))                           
Points$AreaA_X <- data.frame(st_coordinates(P1))[,1]
Points$AreaA_Y <- data.frame(st_coordinates(P1))[,2]                              
Points$AreaB_X <- data.frame(st_coordinates(P2))[,1]
Points$AreaB_Y <- data.frame(st_coordinates(P2))[,2]    

【问题讨论】:

  • 您可以通过多种方式做到这一点。对于 sf 对象类 sf::st_distance 有效,对于 sp 类 sp::spDistsrgeos:gDistance。这些函数返回距离矩阵。如果您想要一种 knn 方法来返回 k 个邻居(例如,前 2 个最近的邻居),您可以使用 spatialEco::knn 函数,该函数可以使用地理距离(坐标)或基于多元距离(使用设计矩阵) .

标签: r distance sf


【解决方案1】:

我在问我的问题时遇到了答案。但是,我想我仍然会发布问题和我的答案,以防将来对其他人有所帮助。

Points_sf <- st_as_sf(Points, coords = c("AreaA_X","AreaA_Y"),crs=27700)            
Points_sf$geometry2 <- st_as_sf(Points[,c("AreaB_X","AreaB_Y")], coords = c("AreaB_X","AreaB_Y"),crs=27700) 
Points_sf$Distance_M <- st_distance(Points_sf$geometry, Points_sf$geometry2, by_element = TRUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2010-10-30
    相关资源
    最近更新 更多