计算地图上两点之间的距离(以公里为单位)

8

我正在进行应用程序中最关键的步骤,我的数据库有一个服务站列表(包含它们的经度和纬度坐标),我需要将用户的经度和纬度发送到一个Web服务,该服务将尝试查找离用户5公里范围内的服务站。是否有任何预先构建的算法可以帮助我?欢迎提供任何建议、链接或您认为对我有帮助的内容,谢谢!

2个回答

21

你可以使用CoreLocation框架来实现: 使用经纬度为每个服务站初始化一个CLLocation对象

CLLocation *loc = [[CLLocation alloc] initWithLatitude:serviceStation.latitude longitude:serviceStation.longitude];

完成这一步后,您可以使用CLLocation的distanceFromLocation实例方法:

CLLocationDistance distance = [loc1 distanceFromLocation:loc2];

距离将是两个点之间的距离,单位为米(CLLocationDistance是一个双精度浮点数)。然后,您只需将其除以1000即可获得以公里为单位的距离 ;-)

编辑:

由于您的数据库位于服务器上,因此在Web服务中计算距离将更有效。由于没有“反向方法”可以通过distanceFromLocation给出距离并检索与当前用户位置相关联的最小和最大纬度和经度,因此您需要在服务器端执行计算。

因此,解决方案是将用户当前位置(纬度和经度)发送到您的Web服务,让它计算与您的距离相关联的最大和最小纬度和经度(对于服务站而言,一个正方形比一个圆形更容易计算和实现)。您可以在这里找到一些资源来执行这些计算:Haversine formula


嗨,你认为计算距离在Web服务端比应用程序内部更好吗? - Malloc

3

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