3

在我幼稚的 Android 初期,我认为这样做的方法是遍历每个对象,检查接近度是否在 X 范围内,如果是,则包括该对象。这是通过 Google Maps 和 GeoPoints 完成的。

也就是说,我知道这可能是最慢的方式。我搜索了 Android Proxmity 算法,但并没有真正得到太多。我正在寻找的是更有效的最佳选择。

有没有我找不到的图书馆?

如果没有,我应该将这些 Location 对象加载到 SQL 中,然后从那里开始还是将它们保存在 JSONArray 中?

一旦我建立了我最好的数据结构,他最好的方法是找到位于 X 英里用户的所有位置?

我不是要求剪切和粘贴代码,而是最有效的方法。然后,我可以偶然发现代码:)

我的第一个直觉是按区域对位置进行分组,但我不确定如何执行此操作。

我可能有数以万计的数据点。

非常感谢任何有助于朝着正确方向前进的帮助。

附带说明一下,在发现我一直在使用的远程 API 是……好吧……只是完全错误并从我的邻近搜索中省略了数据点之后,我到达了这个关口。我还意识到,如果只是放在手机上的数据点上,那么我可以允许用户在没有互联网连接的情况下运行应用程序,而只有 GPS,这将是一个巨大的优势。所以,所有的挫折都伴随着机遇!

4

1 回答 1

2

答案取决于 GeoPoints 的表示:如果这些没有排序,您需要扫描所有它们(这是在线性时间内完成的,排序 wrt。距离或聚类会更昂贵)。使用Location.distanceTo(Location)Location.distanceBetween(float, float, float, float, float[])计算距离。

如果 GeoPoints 是按 wrt 排序的。距离你的位置这个任务可以更有效地完成,但由于供应商不知道你的位置,我认为这不能完成。

如果 GeoPoints 是集群的,即如果您有一组具有某个中心和半径的集群,请选择从您的位置到集群中心的距离在限制加上半径范围内的每个集群。对于这些集群,您需要检查集群中包含的每个 GeoPoint(其中一些距离您的位置可能比限制允许的更远)。或者,您可能会接受错误并包括集群的所有点(如果半径相对较小,我会推荐这个)。

于 2012-10-05T14:38:02.320 回答