iOS NearBy devices



嗨,我正在创建两个应用程序,每个应用程序都需要知道另一个应用程序的位置。我正在使用核心定位。但是,我不确定获取附近设备的最佳/有效方法是什么。我可以使用 parsi api 创建一个带有坐标的数据库。但是,我认为每隔几分钟计算一次最短距离需要做很多工作。有什么想法吗?我为每个应用程序准备了一张地图,我想在地图上显示两个用户之间的最短距离。我正在使用适用于iOS的谷歌地图api

计算距离的API非常轻量级。 在内部,您可以使用哈弗斯公式来计算距离,包括地球的曲率。 从iOS的角度来看,尽管您只需执行此操作:

    CLLocation* previousPoint = [self.allLocations objectAtIndex:i-1];
    CLLocation* currentPoint = [self.allLocations objectAtIndex:i];
    CLLocationDistance distanceFromPrevPoint = [previousPoint distanceFromLocation:currentPoint];

您可以轻松迭代区域中的其他设备。 如果要减少计算次数,则只能计算到相同基本纬度经度的设备的距离(忽略分钟和秒)。

由于您使用的是 Parse,因此您应该能够对给定范围内的所有放置对象进行PFQuery。请参阅此处的文档:https://www.parse.com/docs/ios_guide#geo/iOS(地理查询)

如果它们足够近 (~30 米) 您可以使用 iBeacons.

什么效果最好取决于特定应用的需求。

编辑:既然你说你的距离太远, iBeacons将无法工作.

执行此操作的

蛮力方法是遍历所有连接的设备并计算到每个设备的(毕达哥拉斯)距离,然后选择距离阈值内的设备。然而,这非常耗时。

相反,您可能希望让每个设备报告每个位置(状态?县?邮政编码?随着位置的变化。您将使用地理编码来生成区域信息。您可以让报告设备自己进行地理编码,这样它们只负责更新单个设备的位置信息,并且您不会陷入地理编码的困境。您需要在服务器更改时向服务器报告纬度/长度和区域信息,并使用"阻塞"仅报告重大更改的更改,或每分钟报告一次更改,以频率较低者为准。(我记得在文档中读到,您只需要提交少量地理编码调用,否则您将被锁定和/或您的应用程序被拒绝。

您将在中央服务器中收集数据。

然后,

您可以首先请求与您的当前区域(可能还有附近区域)匹配的其他用户,然后仅对与区域代码匹配的一小部分数据进行距离计算。

最新更新