如何使用 R 计算多个 lon lat 向量之间的距离
How to calculate distance between multiple lon lat vectors using R
我的数据集如下-
a
Location loc.Lon loc.Lat Pincode pin.lon pin.lat
SPM 79.94533 12.97025 "602105" 79.95285 12.96752
SPM 79.94533 12.97025 "602106" 79.88568 12.91943
我想使用 ggmap 包计算两个密码之间的距离 (loc.Lon, loc.Lat) 和 (pin.lon, pin.lat)。
当我 运行 下面的代码时,我得到了想要的结果 -
mapdist(c(a$loc.Lon[2], a$loc.Lat[2]), c(a$pin.lon[2],a$pin.lat[2]), mode = "driving")
但是当我 运行 下面查询整个数据集 a 时,我得到一个错误 -
a$dist = mapdist(c(a$loc.Lon, a$loc.Lat), c(a$pin.lon,a$pin.lat), mode = "driving")
我得到的错误是 -
Error: is.character(from) is not TRUE
请帮我解决这个问题。
mapdist
接受 from
和 to
参数的向量,因此您可以转换它们并将此函数应用于数据集的每一行。
假设你想要公里距离:
get_km_from_mapdist <- function(i) {
mapdist(as.numeric(a[i, c('loc.Lon','loc.Lat')]),
as.numeric(a[i, c('pin.lon','pin.lat')]),
mode='driving')$km
}
a$dists = sapply(1:nrow(a), get_km_from_mapdist)
当直接调用 mapdist
到您的数据时,将坐标转换为带有 as.character()
和 paste0()
的字符串。
a$dist_km <- mapdist(from = paste0(as.character(a$loc.Lat),",",as.character(a$loc.Lon)),
to = paste0(as.character(a$pin.Lat),", ",as.character(a$pin.Lon)))[,c('km')]
我的数据集如下-
a
Location loc.Lon loc.Lat Pincode pin.lon pin.lat
SPM 79.94533 12.97025 "602105" 79.95285 12.96752
SPM 79.94533 12.97025 "602106" 79.88568 12.91943
我想使用 ggmap 包计算两个密码之间的距离 (loc.Lon, loc.Lat) 和 (pin.lon, pin.lat)。
当我 运行 下面的代码时,我得到了想要的结果 -
mapdist(c(a$loc.Lon[2], a$loc.Lat[2]), c(a$pin.lon[2],a$pin.lat[2]), mode = "driving")
但是当我 运行 下面查询整个数据集 a 时,我得到一个错误 -
a$dist = mapdist(c(a$loc.Lon, a$loc.Lat), c(a$pin.lon,a$pin.lat), mode = "driving")
我得到的错误是 -
Error: is.character(from) is not TRUE
请帮我解决这个问题。
mapdist
接受 from
和 to
参数的向量,因此您可以转换它们并将此函数应用于数据集的每一行。
假设你想要公里距离:
get_km_from_mapdist <- function(i) {
mapdist(as.numeric(a[i, c('loc.Lon','loc.Lat')]),
as.numeric(a[i, c('pin.lon','pin.lat')]),
mode='driving')$km
}
a$dists = sapply(1:nrow(a), get_km_from_mapdist)
当直接调用 mapdist
到您的数据时,将坐标转换为带有 as.character()
和 paste0()
的字符串。
a$dist_km <- mapdist(from = paste0(as.character(a$loc.Lat),",",as.character(a$loc.Lon)),
to = paste0(as.character(a$pin.Lat),", ",as.character(a$pin.Lon)))[,c('km')]