说我有一个1802乘2的坐标矩阵(经度/纬度)coord
每行代表一个空间点。
[,1] [,2]
[1,] -90.0 -5
[2,] -87.5 -5
[3,] -85.0 -5
[4,] -82.5 -5
[5,] -80.0 -5
[6,] -77.5 -5
我使用geosphere
包distGeo
函数计算两点p1和p2之间的测地距离,即
distGeo(coord[1,],coord[2,])
我想建立coord
尝试循环
for (i in 1:nrow(coord)){
for (j in 1:nrow(coord)){
distGeo(coord[i,],coord[j,])
}
}
需要永远(甚至使用doMPI和chunking),据我所知outer
只能使用长度为1的参数。
有什么想法吗?
答案 0 :(得分:0)
我没有在R中找到解决方案,而是通过Rcpp使用C ++循环解决方案,只需0.3秒即可运行。
基本步骤:
1 /将纬度/经度坐标转换为n向量(每个点是3d向量)
2 /为每个point_i,j创建一个函数来计算C ++中两者的crossproduct,dotproduct和atan2(遵循描述的算法here)。输入是具有每个点n向量的NumericMatrix。结果是一个NumericMatrix,其中包含每个点之间的角度(以弧度表示)。
3 /使用Rcpp,你只需从R调用函数即可!