iPhone MKMapView:从当前位置检测数组中最近的位置

3

我有一个包含大约1,000个对象的数组,每个对象都有一个精确的坐标值。我想做的是,在按下搜索按钮时检测当前位置并计算与该位置最近的10个对象。您有什么建议可以帮助我完成这个任务吗?谢谢。

2个回答

10

这个公式仅适用于在每个方向上网格相同的平坦表面。这在赤道的小尺度上是正确的,但越远离赤道,经线越接近,而纬线之间的距离仍然保持不变。

例如,从奥克兰到一度纬度约为111.2公里,一度经度约为88.8公里。因此,该网格不是正方形的。实际上,从(0,0)到(0,1)的距离比(1,0)更远。

正确的解决方案是使用苹果的CLLocation及其getDistanceFrom:(或distanceFromLocation:)函数,它基于球体表面(使用WGS84投影)计算真实距离。


1

马克,

是的,这很容易。你只需要循环遍历数组,并计算每个元素与你当前位置之间的距离。然后,你就可以保留最小距离的十条记录。

距离公式就是:

( (x1 - x2)^2 + (y1 - y2)^2 ) ^ (1/2)

所以我会在循环中使用NSMutableArray,然后执行一个推入-弹出类型的算法来返回最低的10个。

如果你需要关于坐标代码的帮助,请告诉我。


2
请记住,如果您只想比较距离(而不是实际距离值),则无需进行平方根运算,只需比较distSquared值。 - tato
1
tato,好主意,我没有想到 - 我太忙于复述高中数学 :) - makdad
尽管此答案被标记为已接受,但它并不正确,因为世界并非平坦的,而经纬度也不是一个正方形网格。向下滚动以获取使用苹果API获取点之间正确距离的答案。 - Craig
Craig,你说得完全正确。我本应该指出这个公式是近似值,并且偏向于地球两端。我在发布时没有意识到。我已经为你的答案点赞,并希望提问者能换用它。 - makdad

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