在我天真的Android开头思想中,我认为这样做的方法是遍历每个对象,检查邻近是否在X范围内,如果是,则包括对象。这是通过Google地图和GeoPoints完成的。
那就是说,我知道这可能是最慢的方式。我搜索了Android Proxmity算法,并没有真正得到太多。我正在寻找的是关于这一点的最佳选择,效率更高。
我找不到任何图书馆吗?
如果没有,我应该将这些Location对象加载到SQL中,然后从那里开始或将它们保存在JSONArray中吗?
一旦我建立了最好的数据结构,找到位于X英里用户的所有位置的最佳方法是什么?
我不是要求剪切和粘贴代码,而是有效地使用它的最佳方法。然后,我可以偶然发现代码:)
我的第一个直觉是按地区对地点进行分组,但我不确定如何做到这一点。
我可能有数以万计的数据点。
非常感谢任何帮助,只是朝着正确的方向前进。
作为旁注,我发现我一直在使用的远程API就是这个时刻......好吧......只是PLAIN WRONG并且从我的邻近搜索中省略了数据点。我也意识到,如果只是放在手机上的数据点,那么我可以允许用户在没有互联网连接的情况下运行应用程序,只有GPS,这将是一个巨大的优势。所以,所有的挫折都会带来机会!
答案 0 :(得分:2)
答案取决于GeoPoints的表示:如果没有对它们进行排序,则需要扫描所有这些(这是在线性时间内完成的,排序距离或聚类将更加昂贵)。使用Location.distanceTo(Location)
或Location.distanceBetween(float, float, float, float, float[])
计算距离。
如果GeoPoints被分类了。距离你的位置这个任务可以更有效地完成,但由于供应商不知道你的位置,我认为这不可能做到。
如果GeoPoints是聚类的,即如果您有一组具有一些中心和半径的聚类,则选择每个聚类,其中从您的位置到聚类中心的距离在限制范围内加上半径。对于这些群集,您需要检查群集中包含的每个GeoPoint(其中一些可能比限制允许的位置更远离您的位置)。或者,您可以接受错误并包括群集的所有点(如果半径相对较小,我会建议这样做。)