2

在 iPhone 上,我以十进制度数获取用户的位置,例如:纬度 39.470920 和经度 = -0.373192;这就是A点。

我需要用另一个 GPS 坐标创建一条线,也是十进制度,点 B。然后,计算从 A 到 B 的线与另一个点 C 之间的距离(垂直)。

问题是我对度数的值感到困惑。我想要以米为单位的结果。需要什么转换?计算这个的最终公式会是什么样子?

4

6 回答 6

10

使用 - (CLLocationDistance)getDistanceFrom:(const CLLocation *)location

firstLongitude = 30.0;
firstLatitude = 30.0;

secondLongitude = 40.0;
secondLatitude = 40.0;

CLLocation *firstLoc = [[CLLocation alloc]initWithLatitude:firstLatitude longitude: firstLongitude];
CLLocation *secondLoc = [[CLLocation alloc]initWithLatitude:secondLatitude longitude: secondLongitude];

double distanceInMeters = [firstLoc getDistanceFrom: secondLoc];
于 2009-07-23T07:14:30.773 回答
6

你的问题很重要:在一个椭球体上,甚至可能有不止一条垂直于 AB 到 C 的线。

如果距离很小,您可能会使用欧几里德近似

Δx = R·cosα·Δλ
Δy = r·Δφ

r = b²/√(b² + (a² - b²)·cos²φ)
R·cosα = a²/√(a² + b²·tan²φ)

有纬度φ、经度λ、长半轴a和短半轴b;在球面近似a = b中。φ公式中的和r必须R·cosα是某种平均值。

球体上的度量 http://img263.imageshack.us/img263/3620/spheroid.gif

一种可能会产生更好结果的方法是在 3 空间(而不是在球体表面)解决问题,并获得与连接线相关的弧长。

为此,您需要知道如何将具有法线角度的地理坐标转换φ为笛卡尔坐标

z = b²·sinφ/√(a²·cos²φ + b²·sin²φ)
r = a²·cosφ/√(a²·cos²φ + b²·sin²φ)
x = r·cosλ
y = r·sinλ

以及从极角地心坐标α到笛卡尔坐标

z = a·b·sinα/√(a²·sin²α + b²·cos²α)
r = a·b·cosα/√(a²·sin²α + b²·cos²α)
x = r·cosλ
y = r·sinλ

请注意,r这些公式中的 与上图中的不同。

A, B,C是与球体表面上的点相对应的欧几里得空间中的向量。垂线的脚由F下式给出

F = 1/|B-A|² · (<B-A,C-A>·B - <B-A,C-B>·A)

<,>标量积和|·|范数在哪里。

现在,我们必须确定F'球体表面上对应于的点F,这意味着我们必须计算

λ' = atan2(y,x)
α' = arctan(z/√(x² + y²))

然后将它们转换回笛卡尔坐标。

割线的长度由下式给出

d = |F'- C|

球面近似中对应的弧长为

s = R·β

β之间的角度在哪里,即F'C

β = arccos(cosβ) = arccos(<F',C>/(|F'|·|C|))

并且R是由下式给出的平均半径

R = ³√(a²·b)

或使用余弦规则为小距离获得更好的价值

R = d/√(2·(1 - cosβ))
于 2009-07-23T07:35:53.990 回答
2

看看维基百科上的地理距离大圆距离文章。他们提供您需要的公式。

于 2009-07-23T07:09:50.923 回答
1

正如 Christoph 所建议的那样,问题中较难的部分可能在 3 空间中得到更好的解决。

我建议的解决方案(对不起,没有代码) - 它假设一个球形地球:

  • 将 A,B,C 表示为来自地球中心 E 的向量
  • 通过向量叉积找到与 EA(从 E 到 A 的向量)和 EB(应该有两个)正交的向量
  • 通过点积确定两个正交向量和 EC 之间的最小角度
  • 从 90 度减去
  • 如果我们旋转坐标系以使 A 和 B 在赤道上,则得到的角度是 C 的“纬度”,可以很容易地将其转换为距离(请参阅richardtallent 的回答)
于 2009-07-24T06:20:55.147 回答
1

您应该研究通用横轴墨卡托 (UTM) 坐标系以及东向和北向术语。基本思想是将 GPS 坐标(在 WGS84 坐标系中)转换为与某个点的距离 - 如果 UTM 北距是距赤道的距离,东距是距选定子午线的距离。使用这种转换,您将能够很好地近似两点之间的实际距离。

于 2009-07-23T07:11:03.027 回答
0

对于纬度,1 度约为 1852 米。

经度的转换取决于纬度。数学对我来说有点模糊,但我似乎记得它类似于 COS(latitude * PI / 180) * 1852

于 2009-07-23T07:13:16.327 回答