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

时间:2012-01-11 14:14:46

标签: iphone objective-c ios ipad

我有一个应用程序,允许用户将其位置传输到服务器。我想要做的是让用户按下一个按钮,该按钮将向应用程序内的任何人发送推送通知,例如半径3英里。有人能给我一个如何实现这一目标的概述。

我能想到的唯一方法就是将gps coords发布到服务器上。然后,当用户按下“发送通知”时,消息被发送到服务器,然后服务器根据位置进行一些复杂的邻近搜索,然后将值返回给用户。

我的问题是,我没有服务器端的经验,也不知道如何在服务器上编程GPS搜索算法。

我是否有办法在不必在服务器上编写代码的情况下做我想做的事情?我可以使用Parse来存储GPS坐标。我想保留我的服务器代码,只需存储和检索值,并处理客户端的其他任何事情。

思想?

2 个答案:

答案 0 :(得分:3)

每个设备应定期将其GPS坐标发送到服务器。我想你已经迈出了这一步。下一步是找到彼此靠近的设备。这很简单。

Distance Between Two Latitude and Longitude Points

但是,如果您有数百万台设备,如果将每次更新与所有其他设备进行比较,则会出现规模问题。您可以将设备存放到某个区域。例如,您可以将更新存储在100平方英里的区域中。当更新进入时,您只需要比较该存储桶中的那些设备以及相邻存储桶(如果它们位于边缘附近)。这只是头部分析的顶部,但希望它能指出你正确的方向。

答案 1 :(得分:0)

如果你真的想把所有负载放在客户端(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所说......把所有这些都放在一台设备上是不明智的。