我到达了我申请中最批评的一步,我的数据库有一个服务站列表(带有经纬度坐标),我必须发送经度和纬度的用户到网络服务,它将尝试找到半径为5公里的用户周围的站点。 是否有任何预先建立的算法可以帮助我,任何建议,链接,或任何你认为可以帮助我的东西是受欢迎的,thx提前:)
答案 0 :(得分: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
答案 1 :(得分:3)
看看“Calculate distance, bearing and more between Latitude/Longitude points”它提供了除Objective-c代码之外的所有内容:算法,工作javascript代码,要测试的表单以及有关该主题的大量信息。