如何根据位置/与用户位置的接近程度有效地检查数据库对象?

时间:2017-06-11 05:35:29

标签: swift database

我正在构建一个应用程序(在XCode中),在一般意义上,它向用户显示信息。信息作为单个对象存储在数据库中(恰好是由heroku托管的Parse服务器)。用户可以选择"看"在距当前位置设定距离内创建的信息。 (当保存到数据库时,信息与其lat和long一起保存,具体取决于用户启动保存时的位置)。我知道我可以通过将他们的纬度和长度与观察用户的当前纬度和长度进行比较来过滤这些信息,并且只显示那些足够接近的信息。大致/一般:

var currentUserLat = latitude //latitude of user's current location
var infoSet = [Objects] //set of all pulled info from DB
for info in infoSet{
    if info.lat-currentUserLat < 3{//arbitrary value
       //display the info
    }else{
       //don't display
    }
}

设置得足够好,而且运行正常。但它工作正常的原因是因为当前数据库中的条目数量很少(应用程序正处于开发阶段)。在实际使用中(即许多用户),DB可能充满了信息对象(比如说,千元)。在我看来,单独拉取和比较信息的纬度并将其与当前用户的每个数据库条目的纬度进行比较将花费太长时间。我知道必须有一种方法可以及时地做到这一点(想想更多...他们只显示在附近的人的简介,尽管有数百万的人,他们也不会那么长时间这样做配置文件)但我不知道什么是最有效的。我想在DB中为不同的地理区域创建单独的部分,然后根据用户当前位置的位置仅搜索数据库的那些特定部分,但这看起来并不复杂,并且仍会导致大量信息拉。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

您是否有理由需要在客户端进行此类检查?我建议将您的坐标发送到您的服务器,然后让服务器使用这些坐标查询您的数据库,并分别根据给定的坐标找出要拉出的项目。然后,您可以让服务器返回到客户端,无论哪个项目是&#34;关闭&#34;对那个用户

编辑:改编

答案 1 :(得分:1)