计算所有矩阵元素与所有矩阵元素的大圆距离

时间:2015-05-29 14:43:53

标签: matlab

我有以下坐标向量

LL = [lat lon]; % 5000 x 2

我想用以下方法计算所有元素与所有元素的距离:

[dist, ~] = deg2km(distance[lat1, lon1, lat2, lon2]);

因此,最终矩阵将是5000x5000。 BTW函数distance来自 Mapping 工具箱。我一个接一个地尝试了一个循环,但它需要几个世纪才能运行。

更新

LL = 
    -79.49583374               40.029166991
    -79.50416707               40.029166991
    -79.50416707               40.037500324

D = pdist(LL, @(x2,x1)(deg2km(distance(x1(1),x1(2),x2(1),x2(2)))))
D =
          2014.58795578131          2014.58795578131         0.168797611011563

虽然只是前两个坐标:

D = deg2km(distance(LL(1,2),LL(1,1),LL(2,2),LL(2,1)))
D =
         0.709531880098433

----

请帮忙吗?

2 个答案:

答案 0 :(得分:3)

我没有意识到distance是一个Matlab函数,对不起。试试这个:

D = pdist(LL, @(x1,x2) (distance(x1(:,1),x1(:,2),x2(:,1),x2(:,2))))

@(x1,x2) (distance(x1(:,1),x1(:,2),x2(:,1),x2(:,2)))做了什么?

这是一个匿名函数,需要两个输入x1x2,每个输入应该 n -by- 2 。现在让我们假装 n 等于 1 。因此,pdist会将来自LL的每一对不同行作为输入x1x2给我们的匿名函数。来自LL的行的格式为[lat, lon],我们会得到两行。我们知道distance需要distance(lat1,lon1,lat2,lon2)。因此,如果x1LL的一行,那么它是[lat1, lon1],因此x1(1)实际上是lat1x1(2)实际上是lon2。与x2[lat2,lon2]相同。

所以我们所有的匿名函数都在将distance从一个带4个输入的函数转换为更加标准的Matlab距离函数,只接受2个输入。

修改

当你交换纬度和经度时,这可能对你有用:

D = pdist(LL, @(x1,x2) (distance(x1(:,2),x1(:,1),x2(:,2),x2(:,1))))

答案 1 :(得分:1)

试试这个:

D = pdist2(LL,LL, @distfun);