我到了应用程序中最关键的一步,我的数据库有一个服务站列表(及其经纬度坐标),我必须发送服务站的经度和纬度将用户添加到 Web 服务,该服务将尝试查找用户周围半径为 5 公里的站点。 是否有任何预建算法可以帮助我,欢迎任何建议、链接或任何您认为可以帮助我的东西,提前谢谢 :)
最佳答案
您可以使用 CoreLocation 框架来执行此操作: 用纬度和经度为每个服务站初始化一个 CLLocation 对象
CLLocation *loc = [[CLLocation alloc] initWithLatitude:serviceStation.latitude longitude:serviceStation.longitude];
完成后,您可以使用 CLLocation 的 distanceFromLocation 实例方法:
CLLocationDistance distance = [loc1 distanceFromLocation:loc2];
距离将是两点之间的距离(以米为单位)(CLLocationDistance 是 double )。然后你只需要将它除以 1000 就可以得到它以公里为单位;-)
编辑:
由于您的服务器上有数据库,因此计算 Web 服务中的距离会更有效。 由于没有 distanceFromLocation 的“逆向方法”可以让您给出距离并检索与当前用户位置关联的最小和最大纬度和经度,因此您需要在服务器端执行计算。
所以解决方案是将用户的当前位置(纬度和经度)发送到您的网络服务,让他计算与您的距离相关的最大和最小纬度和经度(正方形比正方形更容易计算和实现)服务站的圆圈)。您有一些资源可以在此处执行这些计算:Haversine formula
关于web-services - 计算 MAP 中两点之间的距离(以公里为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5743587/