【问题标题】:Mapkit coordinates of point on a line线上点的Mapkit坐标
【发布时间】:2011-11-18 11:26:10
【问题描述】:

我有一个 CLLocationCoordinate2D (c1) 和一个 CLLocation (l1),所以我有每个点的纬度/经度值,我可以使用以下方法计算它们之间的距离(以米为单位):

[c1 distanceFromLocation:l1]

如何找到比 c1 更接近 l1 100 米的点 (c2) 的坐标(沿同一方位)?

我使用以下基本三角函数计算了它:

  1. 利用经纬度差计算斜边和角度
  2. 使用到 cl 的距离和到 c2 的距离之间的比率来获得以 c2 结尾的三角形的斜边
  3. 用cos和sin计算c2的经纬度

但这似乎是一种 hacky 方式,因为它没有考虑曲率,并且似乎以不应该使用的方式使用纬度和经度。不过,它似乎确实可以在短距离内工作。

【问题讨论】:

  • 你想要做到多准确? 100m正负几寸,还是100m正负几码?
  • 当然不是英寸。在 10 米到 10 英里的距离内,它需要精确到几米。
  • 在我看来,您的做法是正确的;我不相信有任何 CLLocation 的本地方法来完成你想要的。你的做法有什么问题?
  • 这对我来说似乎有点粗鲁。需要进行大量计算(我需要对多个坐标进行密集计算),并且涉及将纬度和经度视为笛卡尔坐标。

标签: objective-c ios geolocation mapkit


【解决方案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

【讨论】:

  • 有趣。感谢您挖掘它。
  • 我还没有尝试在代码中实现它,但它似乎是准确的。我希望它对你有用,或者至少让你朝着正确的方向前进!
【解决方案2】:

虽然 Rickay 的回答很有帮助,但我最终还是使用了以下优秀的库,它具有许多用于计算核心位置的有用函数:https://github.com/100grams/CoreLocationUtils

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    相关资源
    最近更新 更多