【发布时间】: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::spDists或rgeos:gDistance。这些函数返回距离矩阵。如果您想要一种 knn 方法来返回 k 个邻居(例如,前 2 个最近的邻居),您可以使用spatialEco::knn函数,该函数可以使用地理距离(坐标)或基于多元距离(使用设计矩阵) .