我正在制作一个应用程序,需要能够找到附近的人,他们是我的应用程序的用户 我查看了许多先前类似问题的答案,似乎我别无选择,只能继续将用户的当前位置上传到服务器,并在必要时获取附近用户的列表。
然后我的问题是,
1.要获得附近的列表,应该有一些计算距离的算法或函数。那么这是不是意味着我必须获得我的位置和其他应用程序用户之间的所有距离?因此,服务器返回具有最小距离结果的特定数量的用户。如果我是对的,会不会有记忆或时间问题?
这可能听起来很奇怪,但是这个怎么样。
我可能会将纬度和经度信息或地址信息发送到服务器。我不能使用字符串搜索算法或其他东西从第一个数字或字母中将这些字符串与所有用户的地址列表进行比较吗?
例如,如果我上次更新的地址是服务器上的'abcde',算法将查找以'a'开头的地址,如果完成搜索,则查找'a'后面有'b'的地址,换句话说'AB'。
这可能不是一个正确的解决方案,但我认为它可能有效,因为地址将以相同的形式保存。
答案 0 :(得分:3)
要有效地查找附近的用户,您需要一个空间索引。请参阅:Hierarchical Triangular Mesh。
您也可以使用其中一个databases that support spatial queries。
我可能会将纬度和经度信息或地址信息发送到服务器。我不能使用字符串搜索算法或其他东西将这些字符串与来自第一个数字或字母的所有用户的地址列表进行比较吗?
这对纬度和经度不起作用,因为这样你只能在一个维度上搜索邻近度。例如,30°N 30°E将出现接近30°N 90°E而不是31°N 30°E。
它可能适用于地址,但只有当它们与坐标可靠地连接时(即不是由用户输入),并且只有当你不介意相距200米但在某些行政边界的不同侧面的用户不会算得很近。
答案 1 :(得分:0)
您可以使用PHP从服务器端使用REST Api,它可以为您的应用程序提供所有用户的当前LAT LONG来自用户的Android手机特定时间Interval Lets Say 5分钟&它返回最近的位置,地址距离。你需要调用Api @特定时间间隔&作为回应来自服务器您将获得所有详细信息您想要的应用程序用户的最近位置,距离和其他事项。
为什么我建议这样做,因为从Android端进行计算会影响应用程序性能有电池问题所以最好从服务器端而不是Android(用户)端进行所有计算
希望这会对你有所帮助。
答案 2 :(得分:0)
我在这里有点晚了,但对于遇到此问题的任何人,假设您将 Firebase 用于您的数据库,您最好的选择是 GeoFire 使用围绕特定坐标点和以公里为单位的半径进行查询。这是 github 存储库 https://github.com/firebase/geofire-android 的链接,其中详细解释了所有内容。