您好我正在创建两个应用,其中每个应用都需要知道其他应用的位置。我正在使用重定位。但是我不确定获得附近设备的最佳/有效方式。我可以使用parsi api创建一个带坐标的数据库。但是我认为每隔几分钟计算最短距离需要做很多工作。有任何想法吗?我有一个每个应用程序的地图,我想在地图上显示两个用户之间的最短距离。我正在使用谷歌地图api for ios
答案 0 :(得分:0)
如果它们足够近(约30米),您可以使用iBeacons。
最好的工作取决于您的特定应用的需求。
编辑:既然你说距离太远,iBeacons就不会工作。
执行此操作的蛮力方法是贯穿所有连接的设备并计算每个设备的(毕达哥拉斯)距离,并选择距离阈值范围内的设备。然而,这非常耗时。
相反,您可能希望每个设备在位置发生变化时为每个位置(State?County?Zip code?)报告某种区域代码。您使用地理编码生成区域信息。您可以让报告设备自行进行地理编码,因此他们只负责更新单个设备的位置信息,并且您不会陷入地理编码状态。您可以在服务器发生变化时向服务器报告纬度/经度和区域信息,并使用" choke"仅报告重大更改的更改,或每分钟一次,以较少的频率为准。 (我记得在文档中读到你只应该提交少量地理编码电话,否则你会被锁定和/或你的应用被拒绝。)
您将在中央服务器中收集数据。
然后,您可以首先请求与您当前区域(可能还有附近区域)匹配的其他用户,然后仅针对与区域代码匹配的数据的小部分进行距离计算。
答案 1 :(得分:0)
计算距离的API非常轻量级。在内部,您使用Haversine formula来计算距离,包括地球的曲率。从iOS的角度来看,你只需这样做:
CLLocation* previousPoint = [self.allLocations objectAtIndex:i-1];
CLLocation* currentPoint = [self.allLocations objectAtIndex:i];
CLLocationDistance distanceFromPrevPoint = [previousPoint distanceFromLocation:currentPoint];
您可以轻松地遍历区域中的其他设备。如果要减少计算次数,则只能计算相同基本纬度经度的设备距离(忽略分钟和秒)。
答案 2 :(得分:0)
由于您正在使用Parse,因此您应该能够为给定范围内的所有场所对象执行PFQuery
。请参阅此处的文档:https://www.parse.com/docs/ios_guide#geo/iOS(地理查询)