iOS查找其他附近设备(GPS位置)

我有一个应用程序,允许用户传输他们的位置到服务器。 我想要做的是让用户按下一个button,将发送推送通知给任何人与应用程序内让我们说3英里半径。 有人能给我一个我如何能做到这一点的概述。

我能想到的唯一办法就是将gps坐标发布到服务器上。 然后当用户按下“发送notif”消息被发送到服务器,然后服务器根据位置做一些复杂的邻近search,然后将值返回给用户。

我的问题是,我没有服务器端的经验,也不知道如何在服务器上编程一个GPSsearchalgorithm。

有没有办法让我做我想要的,而不必在服务器上编写代码? 我能够使用分析来存储GPS坐标。 我想保持我的服务器代码只是存储和检索值,并处理客户端的一切。

思考?

每个设备应该定期发送他们的GPS坐标到服务器。 我想你已经有了这一步。 下一步是find彼此靠近的设备。 这很简单。

两个纬度和经度点之间的距离

但是,如果您拥有数百万个设备,那么如果将每个更新与所有其他设备进行比较,就会产生规模问题。 您可以将设备分散到某个区域。 例如,您可以将更新存储到100平方英里的区域。 当一个更新进来时,你只需要比较那个桶里的那些设备加上相邻的桶,如果它们靠近边缘的话。 这只是头脑分析的首要问题,但希望它能指出你正确的方向。

如果你真的想把所有的负载放在客户端(iOS)上:

  • 向服务器查询推送通知的所有可能收件人的ID和位置
  • 在自定义对象中存储ID和位置,并将它们放在NSArray或NSSet中

然后

//otherUsers is the NSArray or NSSet with custom objects //currentLocation is the users current location for(MYCustomUser * otherUser in otherUsers) { if([currentLocation distanceFromLocation:[otherUser location]] < 4829) { //4828 == 3 Miles in Meters, so 4829 is 3 Miles + one Meter //send msg to server to perform push notf. to user } } 

完成…

你应该把它放在一个NSOperationQueue中,这样可以在后台运行一个不会阻塞的设备

但是,正如bbarnhart所说…将所有这些都放在设备上并不是很明智的做法。