【发布时间】:2016-08-09 17:43:19
【问题描述】:
我有 44,000 个美国邮政编码,它对应于 R 中的质心纬度/经度。这是来自 R 中的“邮政编码”包。 我需要计算每个邮政编码之间的距离并保持小于 5 英里的距离。问题是要计算邮政编码之间的所有距离,我必须创建一个大小为 44,000x44,0000 的向量,由于空间问题,我不能。
我检查了 R 中的帖子,最接近我的要求是吐出 2 个具有 lat/long 的数据集之间的最小距离
DB1 <- data.frame(location_id=1:7000,LATITUDE=runif(7000,min = -90,max = 90),LONGITUDE=runif(7000,min = -180,max = 180))
DB2 <- data.frame(location_id=7001:12000,LATITUDE=runif(5000,min = -90,max = 90),LONGITUDE=runif(5000,min = -180,max = 180))
DistFun <- function(ID){
TMP <- DB1[DB1$location_id==ID,]
TMP1 <- distGeo(TMP[,3:2],DB2[,3:2])
TMP2 <- data.frame(DB1ID=ID,DB2ID=DB2[which.min(TMP1),1],DistanceBetween=min(TMP1) )
print(ID)
return(TMP2)
}
DistanceMatrix <- rbind_all(lapply(DB1$location_id, DistFun))
即使我们可以修改上面的代码以包含所有
是否有一种有效的方法可以得出所有邮政编码组合,这些组合的质心彼此之间
【问题讨论】:
-
我怀疑您可以跳过对数值大于大约 500 的某个数字的组合的任何距离检查。这将使组合负载更易于管理。
-
如何过滤掉不在以点 1 为中心的长度为 10 英里的正方形内的对,然后仅计算位于其中的对。
data.tables 应该可以帮助您非常有效地进行过滤。 -
您想如何存储距离?
标签: r algorithm performance geolocation distance