2014-09-04 85 views
1

我有3个纬度和logintude:街道和点之间的距离,如果纬度和logintude

X: 1.000000000 1.000000000

Y: 2.000000000 2.000000000

Z: 3.000000000 3.000000000

我需要计算Z和Z之间的最小距离d。通过X形成的线 - > Y,请帮助,解决我的问题到现在为止

PHP代码:

function calc ($a, $ay, $b, $by,$c, $cy) { 
    $a = array($a, $ay, 0);// i use 0 altitude always 
    $b = array($b, $by, 0); 
    $c = array($c, $cy, 0); 
    $ab = array(
     (($a[1] * $b[2]) - ($b[1] * $a[2])), 
     (($a[2] * $b[0]) - ($b[2] * $a[0])), 
     (($a[0] * $b[1]) - ($b[0] * $a[1])) 
    ); 
    $normal = pow(pow($ab[0],2)+pow($ab[1],2)+pow($ab[2],2),0.5); 
    $d = array(
     ($ab[0]/$normal), 
     ($ab[1]/$normal), 
     ($ab[2]/$normal) 
    ); 
    $e_ = (($d[0] * $c[0]) + ($d[1] * $c[1]) + ($d[2] * $c[2])); 
    $e = acos($e_); 
    $res = pi()/2 - $e; 
    $res = $res * 6378.1; 
    return $res; 
} 
+1

最小距离'0'因为这些点是共线的。 – abiessu 2014-09-04 21:10:24

回答

2

,我们需要在这里做一些球面几何学。如果我们只是在飞机上工作,这个问题很容易https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line在一个球体上的事情更加棘手。

首先我们指的是由X - > Y组成的线。我们可能是指一个大圆圈https://en.wikipedia.org/wiki/Great_circle 例如赤道。

假设对于一个时刻,点X,Y分别为在赤道上,则Z和赤道之间的距离将是正比于Z的纬度来解决这个问题。将旋转

单程我们的点使得X和Y位于赤道上,然后找到Z的纬度。这样做的过程是(设置轴,使得x轴通过0,0输出,y轴是正向的,z轴正北)

  1. 绕z轴旋转X→X1,Y→Y1,Z→Z1,X1的经度为零。
  2. 围绕y轴X1 - > X2,Y1-> Y2,Z1-> Z2旋转,因此X2的纬度为零。
  3. 绕Z轴X2-> X3,的Y2> Y3,Z2-> Z3所以Y3的纬度为零

我们现在已经在赤道上都X3和Y3,可以找到Z3的纬度。实际距离将是地球的半径* Z3弧度的纬度

好奇地@abiessu评论实际上并不正确,通过1N 1E和2N 2E的大圆不完全贯穿3N 3E。我做了14厘米的距离。


更简单的方法来计算,这是找到X和Y的叉积,W = X^Y。该载体是垂直于该平面通过X,Y和球体的中心。现在找到点积W。 Z这是在W和Z * len(W)* len(Z)之间的角度。因此,用这两个长度来划分点积,给出a和找到pi/2-a平面上Z的倾斜角度。乘以半径以获得距离。


以在1N 1E的点的示例采取在单位球面上

一个1.0N 1.0E(0.999695,0.017450,0.017452)

b 2.0N 2.0E(0.998782,0.034878点,0。034899)

Ç3.0N 3.0E(0.997261,0.052264,0.052336)

一个^ B(0.000000,-0.017458,0.017439)

d =单元(^ B)(0.000011,-0.707484 ,0.706730)

d。 Ç0.000022543731833669922

E = ACOS(d C)= 1.570773783063061弧度

PI/2 - E =地球上0.000022543731835522607

0.14378617602014673公里距离与半径6378.1公里

+0

您能否演示假设0高度的示例的解决方案? – 2014-09-08 20:08:29

+0

最后一节是一个例子。您可以使用知道的答案对各种示例运行相同的过程。举例来说,赤道上的任何两点,以及北纬45度的三分之一。距离将是赤道至极点5000公里的一半。 – 2014-09-08 23:17:06

+0

真的thx,aparently解决了我的问题 – 2014-09-09 17:19:19