我目前有两个数据框。每个数据框由索引,经度和纬度组成。该指数并没有太大的实际价值。只是在那里能够识别这些地方。
示例输入:
df1 <- data.frame(
index1 = c('1','2','3','4','5','6'),
lon1 = c(-95.800781,-95.855873,-95.923451,-95.785214,-94.658239,-95.471652),
lat1 = c(42.29118,43.36395,43.50854,43.37096,48.07726,43.214579))
df2 <- data.frame(
index2 = c('A','B','C','D','E'),
lon2 = c(-96.800175,-96.537616,-96.00984,-95.92965,-95.471652),
lat2 = c(43.34639,47.85308,42.79573,43.42444,44.27002))
目标:
我正在寻找一种方法来计算第一张桌子中的位置和第二张桌子中的位置之间的距离(欧几里德)。理想情况下,对于df1中的每个观察,我希望能够在df1和df2中的某个位置之间保持最短距离。因此,可能不会使用df2中的每个观察值来计算最短距离。
我尝试使用以下方法解决此问题。 Jaap的解决方案对我不起作用的原因是因为我没有地方。也许我理解这个错误。任何更新都将不胜感激。
Geographic distance between 2 lists of lat/lon coordinates
AND
earth.dist <- function (Lon1, Lat1, Lon2, Lat2)
{
rad <- pi/180
a1 <- Lat1 * rad
a2 <- Lon1 * rad
b1 <- Lat2 * rad
b2 <- Lon2 * rad
dlon <- b2 - a2
dlat <- b1 - a1
a <- (sin(dlat/2))^2 + cos(a1) * cos(b1) * (sin(dlon/2))^2
c <- 2 * atan2(sqrt(a), sqrt(1 - a))
R <- 6378.145
d <- R * c
return(d)
}