Java 用于查找给定距离内所有地质点的Android算法

Java 用于查找给定距离内所有地质点的Android算法,java,android,google-maps,Java,Android,Google Maps,在我天真的Android头脑中,我认为这样做的方法是在每个对象之间循环检查接近度是否在X范围内,如果在X范围内,则包括该对象。这是通过谷歌地图和地理点实现的 尽管如此,我知道这可能是最慢的方法。我搜索了安卓Proxmity算法,并没有得到多少结果。我所寻找的是与此相关的最佳选择,即更有效地解决问题 有没有我找不到的图书馆 如果不是,我应该将这些位置对象加载到SQL中,然后从那里开始,还是将它们保存在JSONArray中 一旦我建立了我的最佳数据结构,找到用户X英里的所有位置的最佳方法是什么 我不

在我天真的Android头脑中,我认为这样做的方法是在每个对象之间循环检查接近度是否在X范围内,如果在X范围内,则包括该对象。这是通过谷歌地图和地理点实现的

尽管如此,我知道这可能是最慢的方法。我搜索了安卓Proxmity算法,并没有得到多少结果。我所寻找的是与此相关的最佳选择,即更有效地解决问题

有没有我找不到的图书馆

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

一旦我建立了我的最佳数据结构,找到用户X英里的所有位置的最佳方法是什么

我不是在要求剪切粘贴代码,而是高效实现这一点的最佳方法。然后,我可以结结巴巴地浏览代码:)

我的第一个直觉是按区域对地点进行分组,但我不确定该怎么做

我可能有数万个数据点

我们非常感谢您能帮助我们朝着正确的方向前进


顺便说一句,我在发现我一直在使用的一个远程API是。。好。。只是我的近距离搜索中的数据点完全错误。我还意识到,如果只把数据点放在手机上,那么我就可以让用户在没有互联网连接的情况下运行应用程序,而且只有GPS,这将是一个巨大的优势。因此,所有的挫折都会带来机遇

答案取决于地质点的表示方式:如果这些点未排序,则需要扫描所有点(这是在线性时间内完成的,排序的成本将更高。距离或聚类将更高)。使用
Location.distanceTo(Location)
Location.distanceBetween(float,float,float,float,float[])
计算距离

如果地质点按wrt排序。距离您的位置此任务可以更有效地完成,但由于供应商不知道您的位置,我认为这无法完成


如果地质点是群集的,即如果有一组具有某个中心和半径的群集,请选择从您的位置到群集中心的距离在限制范围内加上半径的每个群集。对于这些簇,您需要检查簇中包含的每个地质点(其中一些点可能距离您的位置超出限制)。或者,您可以接受错误,并包括集群的所有点(如果半径相对较小,我建议这样做)。

当没有一个像Android这样的问题时,这个问题究竟是如何值得否决的?就这点而言,Java?最接近的匹配,重新考虑。好的,有道理。因此,我的下一个任务是找出如何基于集群存储这些位置。。在我进一步研究之前,我不会问那个问题。。(但如果我找到了,我会发布链接!)。谢谢