Java 在数组中查找最近的坐标?

Java 在数组中查找最近的坐标?,java,math,2d,trigonometry,Java,Math,2d,Trigonometry,我有两个ArrayList,双数据类型, 1.纬度 2.经度, 每个都有200多个元素 假设我给出一个随机测试坐标,比如(1.33103.4),格式是[纬度,经度] 是否有任何算法可以轻松找到最近的点, 或者我必须用蛮力计算每一个可能的点,找到斜边,然后比较200多个斜边来返回最近的点吗?谢谢如果数组已排序,则可以使用二进制搜索在数组中查找请求点的位置。找到索引后,应检查四个相邻点以找到最近的 1) 假设有两个按经度和纬度排序的数组 2) 搜索第一个点,然后找到附近的两个点 3) 然后搜索第二个

我有两个ArrayList,双数据类型, 1.纬度 2.经度, 每个都有200多个元素

假设我给出一个随机测试坐标,比如(1.33103.4),格式是[纬度,经度]

是否有任何算法可以轻松找到最近的点,
或者我必须用蛮力计算每一个可能的点,找到斜边,然后比较200多个斜边来返回最近的点吗?谢谢

如果数组已排序,则可以使用二进制搜索在数组中查找请求点的位置。找到索引后,应检查四个相邻点以找到最近的

1) 假设有两个按经度和纬度排序的数组

2) 搜索第一个点,然后找到附近的两个点

3) 然后搜索第二个点,再找到两个点

4) 现在有两到四个点(结果可能相交)

5) 这些点将围绕目标点形成一个正方形


6) 找到最近的点

沿一个轴对点阵列进行排序。然后,沿该轴定位阵列中最靠近所需点的点,并计算距离(使用适合问题拓扑和比例的任何度量)

然后,沿阵列在两个方向上搜索,直到到这些点的距离大于目前为止的最佳结果。最短距离点就是答案

这可能导致必须搜索整个数组,并且是受问题几何体约束的一种形式。如果这些点合理地均匀分布在您要搜索的点周围,那么扫描将不需要多次尝试


备用空间索引(如四叉树)将提供更好的结果,但少量的点将使准备索引的设置成本比简单排序大得多。您需要跟踪排序导致的位置更改,因为其他数组的排序方式不同。如果将数据更改为单个点数组,则排序将同时对整个点重新排序。

选择最接近的lat(或long)值在长(或lat)轴上搜索不是真的,事实上,您可以停留在lat(或long)线上,但沿着长(或lat)值远离


所以最好的方法是计算所有的距离并对它们进行排序

如果你计算了所有的斜边,你可以在一个循环中计算距离并实现最小(距离)逻辑。而且你的所有点应该在地理上彼此接近,所以你可以认为这个区域是平原的,否则你需要考虑地球曲率。你对距离的定义是什么?“假设”是平面几何学中的一个术语,但您使用“经度”和“纬度”似乎表明点位于球体表面……您看过R树()吗?或一般的空间索引算法()?沿一个轴选择最近点的方法是搜索的起点。它至少使沿一个轴的距离最小化。随后的探测(两个方向)将确定最近的点。距离度量的选择取决于所考虑区域的曲率。