Android算法:查找给定距离内的所有地理点

3
在我最初的Android开发中,我认为处理这个问题的方法是循环遍历每个对象,检查是否在X范围内,如果是,则包括该对象。这是使用Google Maps和GeoPoints完成的。
然而,我知道这可能是最慢的方法。我搜索了Android Proximity算法,但并没有找到太多有用的内容。我想知道的是关于这方面的最佳选项,以提高效率。
是否有任何我无法找到的库?
如果没有,我应该将这些位置对象加载到SQL中,然后从那里继续操作呢?还是将它们保留在JSONArray中?
一旦我确定了最佳数据结构,找到所有位于用户X英里范围内的位置的最佳方法是什么?
我不是要求剪切和粘贴代码,而是要求最有效的方法。然后,我可以摸索着编写代码 :)
我的第一直觉是按区域分组位置,但我不确定如何做到这一点。
我可能会有成千上万个数据点。
非常感谢任何帮助指导我朝正确方向前进。
另外,我在发现自己使用的远程API有误,并且省略了我的接近搜索数据点之后,才走到了这一步。我也意识到,如果仅将数据点放在手机上,那么我可以允许用户在没有互联网连接的情况下运行应用程序,只使用GPS,这将是一个巨大的优势。所以,每一次挫折都有机会!

这个问题在 Android 方面没有一个类似的,甚至在 Java 方面也没有。为什么会有人对它进行负评价呢?最接近的匹配是 http://stackoverflow.com/questions/9791074/android-find-all-locations-within-a-given-distance,请重新考虑。 - Todd Painton
1个回答

2
答案取决于GeoPoints的表示方式:如果它们没有排序,你需要扫描所有点(这是线性时间完成的,按距离排序或聚类将更加昂贵)。使用Location.distanceTo(Location)Location.distanceBetween(float, float, float, float, float[])来计算距离。
如果GeoPoints按距离排好序,那么这个任务可以更有效地完成。但由于供应商不知道您的位置,我假设这不能完成。
如果GeoPoints被分成簇,即有一些中心和半径的集合,请选择每个距离您的位置到该簇中心的距离在限制范围内加上半径的簇。对于这些簇,您需要检查包含在簇中的每个GeoPoint(其中某些可能比允许的限制距离更远)。或者,您可以接受误差并包括簇的所有点(如果半径比较小,我建议这样做)。

好的,明白了。那么我的下一个任务是找出如何根据聚类来存储这些位置信息。在我进行更多研究之前,我不会提出这个问题,但是如果我找到相关链接,我会分享的!谢谢! - Todd Painton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接