使用纬度和经度iphone地图上两点之间的距离方程
Posted
技术标签:
【中文标题】使用纬度和经度iphone地图上两点之间的距离方程【英文标题】:Equation for distance between two points on the map using latitude and longitude iphone 【发布时间】:2011-09-12 21:16:44 【问题描述】:我正在尝试计算 iPhone 地图上两点(引脚)之间的距离。 一切正常,但是如果您将其中一个引脚靠近地图的左边缘而将另一个引脚放在地图的右边缘,则 distanceFromLocation 方法总是返回点之间的最短距离(当然地球不是平坦的)。我尝试切换 CLLocations,但它仍然显示最短距离。
对于我的应用,我需要计算两个引脚之间的最短和最长距离。 这个问题似乎是微不足道的,但我无法拿出任何东西来解决它。 任何帮助或线索表示赞赏。谢谢!
【问题讨论】:
见这里:movable-type.co.uk/scripts/latlong.html 我有一个,我很高兴分享它。但我不相信我的方程式是正确的。我认为我的错误是我认为地球是一个完美的球,但地球不是。因此,我宁愿将此评论用作书签来关注讨论。 @Pete,感谢您的链接。 请看下面的帖子。 ***.com/questions/6105151/… @Hermann Klecker -- 链接位置的代码进行了同样的简化:地球是一个半径为 6371 公里的球体。 要求最长距离是没有意义的。除了最短距离之外,还有无限多的路线。 【参考方案1】:有一个函数MKCoordinateRegionForMapRect
返回一个MKCoordinateRegion。在没有尝试过的情况下,您似乎需要做的就是准确地将矩形指定为一个对角线由一个引脚界定的区域,另一个对角线由另一个引脚界定。您可以使用 CGRectUnion 两次,将引脚原点作为矩形原点和任意小的宽度和高度。
那么引脚之间的距离将是 latitudeDelta 和 longitudeDelta 所表示的距离的平方根,该 latitudeDelta 和 longitudeDelta 在 span 中返回并平方并相加。 (即毕达哥拉斯定理,两个边长是三角形的水平边和垂直边,对角线是你的点之间的直线。)
以米为单位的纬度Delta很容易找到,每个纬度为111公里。
要查找 longitudeDelta 的米,您需要更多代码。
#define EARTH_EQUATORIAL_RADIUS (6378137.0)
#define WGS84_CONSTANT (0.99664719)
#define degreesToRadians(x) (M_PI * (x) / 180.0)
// accepts decimal degrees. Convert from HMS first if that's what you have
double lengthOfDegreeLongitude(double degrees)
double tanDegrees = tanf(degreesToRadians(degrees));
double beta = tanDegrees * WGS84_CONSTANT;
double lengthOfDegree = cos(atan(beta)) * EARTH_EQUATORIAL_RADIUS * M_PI / 180.0;
return lengthOfDegree;
给该函数您感兴趣的位置的经度,然后将结果乘以以度为单位的 longitudeDelta,得到以米为单位的距离。然后你有一个水平距离和一个垂直距离,你可以找到你正在寻找的对角线。
如果您正在寻找一个在 N-S 中非常大的距离,则不准确会变得很糟糕,因为经度的长度会在计算过程中发生变化。你也可以把 111 公里的纬度稍微细化一下,这只是凭记忆。
【讨论】:
以上是关于使用纬度和经度iphone地图上两点之间的距离方程的主要内容,如果未能解决你的问题,请参考以下文章
mysql 下 计算 两点 经纬度 之间的距离 计算结果排序