2011-11-18 61 views
0

我有一个CLLocationCoordinate2D(c1)和一个CLLocation(L1),所以我有纬度/经度值对于每个点,我可以使用计算它们之间米的距离:Mapkit一行点的坐标

[c1 distanceFromLocation:l1] 

我怎样才能找到一个点(C2)接近100米L1比C1的坐标(沿着相同的轴承)?

enter image description here

我已经使用利用它基本TRIG计算如下:

  1. 使用纬度和经度差,计算
  2. 使用的距离之间的比率与cl斜边和角而距离C2得到一个三角形的斜边在C2结束
  3. 使用COS和罪恶计算C2
  4. 的经度和纬度

但这似乎的做这件事,因为它没有考虑到曲率哈克的方式,似乎是使用经度和纬度,他们不应该被使用的方式。它似乎在短距离上工作。

+0

如何准确,你想是什么? 100米加或减几英寸,或100米加或减几码? –

+0

当然不是英寸。它需要在10米到10英里之间的距离上精确到几米。 – Undistraction

+1

在我看来,你这样做的方式是正确的;我不相信有CLLocation的本地方法来实现你想要的。你这样做的方式有什么问题? –

回答

1

了一些研究之后,我发现了一个基本公式为地球表面上计算两个点之间的弯曲距离:

dlon = lon2 - lon1 
dlat = lat2 - lat1 
a = { sin(dlat/2) }^2 + [ cos(lat1) * cos(lat2) * { sin(dlon/2) }^2 ] 
c = 2 * arcsin(min(1,sqrt(a))) 
d = R * c 
+0

有趣。感谢您的挖掘。 – Undistraction

+0

我还没有尝试过在代码中实现它,但它似乎是准确的。我希望它适合你,或者至少让你朝着正确的方向发展! –