【发布时间】:2015-07-31 08:41:17
【问题描述】:
我有两个数据框,每个数据框都有三个变量:location_id、latitude 和 longitude。对于第一个数据帧中的每个location_id,除了每个df 的location_id 之间的距离之外,我还必须在第二个数据帧中找到最接近的location_id。
我尝试使用expand.grid 将两个数据框组合在一起(有效),但是当我尝试将原始列表中的纬度和经度合并到我的超级列表中时,我用完了内存(第一个数据帧有 7000 个 location_id,第二个数据帧有 5000 个location_ids)。
我能够得到公式来计算堆栈溢出时其他地方的两点之间的距离:
earth.dist <- function (long1, lat1, long2, lat2)
{
rad <- pi/180
a1 <- lat1 * rad
a2 <- long1 * rad
b1 <- lat2 * rad
b2 <- long2 * 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)
}
但我很难在这个问题的上下文中应用它。任何帮助表示赞赏!
编辑:
数据集看起来完全像这样:
location_id LATITUDE LONGITUDE
211099 32.40913 -99.78064
333547 32.45192 -100.39325
369561 32.47458 -99.69176
123141 33.68169 -96.60887
386913 33.99921 -96.40743
123331 31.96173 -83.75830
【问题讨论】:
-
你能给出一个可重现的例子吗?我认为可能有一个基于
outer()的解决方案来首先测量点对之间的纬度和长距离,然后将它们组合起来(这当然适用于欧几里得距离——sqrt(outer(x1,x2,"-")^2+outer(y1,y2,"-")^2)但它可能需要更多的工作使其适用于大圆距离) -
我猜有一个工具可以将点集(如您的 dfs)构建到多边形中,然后获取多边形之间的距离。这可能是相关的:stackoverflow.com/q/8579913/1191259
标签: r geospatial latitude-longitude