越过两组坐标以计算最小距离? tidyr地球圈R

问题描述

在同一边界区域中,我有一组2,220个嵌套坐标(var1)和另一组26个界标坐标(var2)。我想找到2624组中每个点之间的2,224个坐标之间的距离,以便创建带有列(嵌套坐标,最小距离界标坐标,以m为单位的距离)的新数据框。

我被困在尝试交叉这两个集合以生成一个集合,其中所有界标坐标与每个嵌套坐标配对。

**nest**                **landmark**         **distance**

lat1,lon1              lat1,lon1            34
lat1,lon1              lat2,lon2            18
lat1,lon1              lat3,lon3            82
....
lat1,lon1              lat26,lon26           61
lat2,lon2              lat1,lon1            94
lat2,lon2              lat2,lon2            38
...
lat2,220,lon 2,220     lat 26,lon26          46

我尝试过交(var1,var2),其中var1和var2都是包含经度和纬度值的矩阵,然后计算每个结果行之间的Haversine距离(请参见下文)。这似乎可行,但是我认为这并没有给我期望的确切结果。交叉产生的行数与这些集合的nrow的乘积不一致。

我还希望能够将具有所有距离值的结果集分成26个组,其中每个组包含嵌套坐标(每行重复),26个界标坐标之一以及两点。从那里,我将选择距离最小的行。

newset <- crossing(nests,landmarks)
mindist <- distHaversine(newset[1],newset[2],r=6378137)
newsetwdist <- cbind(newset,mindist)

sv <- split(newsetwdist,rep(1:56056,each=26))
#56056 was the resulting number of rows,even though I expected 57,720.

var3 <- lapply(sv,"[",3) #returns a nested list of all distances for each nest
var4 <- lapply(var2,"[[","mindist")

df = as.data.frame(do.call(rbind,lapply(var4,unlist)))
min.dist.from.landmark <- apply(df,1,FUN=min)

似乎应该是一个简单的解决方法,我们将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)