繁体   English   中英

如何在两个数组中找到最接近的匹配对以在最后一个数组中找到结果

[英]How to find the closest matching pair in two arrays to find result in last array

我有三个 ArrayList 的双打。 一种用于纬度、经度和温度。 数组都是未排序的。 用户在地球上有一个光标位置,它应该尝试在表中找到最近的纬度和经度对。 纬度和经度对分别对应于表中的温度。

我的问题是我想不出一个好方法来遍历这些数组以找到最接近的匹配值。

我尝试做的是遍历整个数组并尝试找到最接近的经度和纬度值,但由于它们未排序,因此它总是会找到最接近的第一个值并停止。 另一个问题是这些值在十进制范围内,因此光标位置永远不会在表中找到确切的值,所以我认为它必须在 +/- .00005 度内。

如果光标位置确实包含与表相对应的精确值,我想这会简单得多,但需要有某种范围可以落入 (.00005),所以我实际上得到了温度结果。

例子

    CLonArray = new ArrayList<>();
    CLatArray = new ArrayList<>();
    BolometricBrightnessArray = new ArrayList<>();

    double CenterLonCoord = Double.parseDouble(CenterLon);
    CLonArray.add(CenterLonCoord);

    double CenterLatCoord = Double.parseDouble(CenterLat);
    CLatArray.add(CenterLatCoord);

    double Tbol = Double.parseDouble(BolometricBrightness);
    BolometricBrightnessArray.add(Tbol);

桌子

网上有很多关于在一个数组中找到最接近目标值的信息,但我需要在两个数组中找到最接近的值并使用这两个值来找到温度的匹配项。

任何关于如何解决这个问题的想法将不胜感激! 不一定要寻找最有效的方法,而只是一个可以检查结果的解决方案。

我的第一个回答是评论:对数组进行排序。

然后,写下来,我想我知道你真正的问题是什么:你有一个点(由用户选择),你需要从列表中找到最近的点。 因此,排序是没有意义的。 您可以让第一个值非常接近,但另一个值非常远:比另一个点更远。 这是因为这些点由几个值(纬度和经度,但 x 和 y 相同)标识。

因此,了解您的问题是什么,我认为解决方案是为每对点找到彼此之间的相对距离。 获取距离我认为是一个简单的函数,因为您知道所有值:(userLat, userLon) 和 (pntLat, pntLon)。

获得值列表后,您只需扫描列表即可非常快速地找到最接近的值。

有 2 位信息我可以给你,应该在这里有所帮助

  1. 您不应将经度和纬度列表视为单独的列表。 相反,它们应被视为单个点列表。 查找列表中最接近用户所选点的点就像检查列表中的每个点与用户所选点的距离一样简单,并选择距离最小的点。
  2. 请记住,经度和纬度与球体上的点有关,而不是正方形。 即这两个点中哪一个更接近 (-89.5, 0):(-89.5, 180) 或 (-88, 0)。 https://keisan.casio.com/exec/system/1359534351给出了从纬度和经度转换为笛卡尔坐标的公式。 (您可能可以安全地假设地球的半径是恒定的)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM