iOS和Android上两点之间的距离计算方式不同

7

我正在尝试测量两点(经度,纬度)之间的距离。我的问题是,在iOS和Android上,我得到了不同的结果。

我使用了这个网站进行了检查,并且结果显示Android的数值是正确的。

iOS中我使用了MapKit方法distanceFromLocation:来获取距离:

以下是我的测试位置:

P1: 48.643798, 9.453735 P2: 49.495150, 9.782150

iOS距离: 97717米 Android距离: 97673米

为什么会出现这种情况?我该如何解决?


1
它们实际上确实都使用相同的数据:请参见下面的答案。 - lnafziger
3个回答

9

我遇到了一个不同的问题,结果偶然发现了我们两个问题的答案:

iOS上可以这样操作:

 meters1 = [P1 distanceFromLocation:P2]
 // meters1 is 97,717

 meters2 = [P2 distanceFromLocation:P1]
 // meters2 is 97,630

我已经搜索了很久,但是还没有找到这个差异的原因。既然这些点完全相同,无论你走哪条路线,它都应该显示相同的距离。我将其提交给苹果作为一个错误,他们将其关闭为重复项,但仍未修复。我建议任何想要解决此问题的人也将其提交为错误。
同时,两者的平均值实际上是正确的数值:
 meters = (meters1 + meters2)/2
 // meters (the average of the first two) is 97,673

显然,安卓系统没有这个问题。

数学的魔力。这将帮助我平静客户。这是有解释的吗?还是为了计算这两个值之间的平均距离而做的? - MoFuRo
3
我已经搜寻了许多次,但仍然找不到造成这种差异的原因。既然这些点完全相同,无论你以何种方式旅行,它应该显示相同的距离。我将其作为错误提交给了苹果,并正在等待回复。 - lnafziger
在两个不同的视图控制器中显示距离,但相同点的距离不同。调试了两个小时,最终发现这是原因。这太疯狂了,应该由苹果修复!或者至少提到它是非关联的。 - darshansonde

3
经度和纬度并不是你所需要的全部。你必须使用像WGS84或ETRS89这样相同的参考模型。 地球不是一个精确的椭球体,因此你需要模型来计算距离,但没有一个模型是完全准确的,取决于你使用的模型,距离会有所不同。
请确保在iOS和Android中使用相同的参考模型。

1
好的,我知道这一点,但我无法设置这些模型。如果MapKit框架在其他平台上使用不同的计算模型,那会让我感到惊讶。 - MoFuRo

3

有多种方法可以根据地球曲率计算长/纬坐标之间的距离,没有正确或错误的方法。最可能是这两个平台使用稍微不同的模型。

以下是一些用于自行计算距离的公式。 http://www.movable-type.co.uk/scripts/latlong.html

如果您绝对需要它们相同,则只需使用其中一种公式实现自己的计算,然后您可以确保在两个平台上获得相同的结果。


如果它们确实使用不同的计算模型,那将是我的选择。我很想知道iOS和Android是否真的使用不同的计算模型。 - MoFuRo
2
MapKit是苹果的代码,而Android则是谷歌的代码。即使MapKit使用了谷歌的计算算法,也不能保证在谷歌地图软件的连续版本之间没有进行过调整。 - Nick Lockwood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接