2016-08-09 29 views
-2

我想知道如何从给定的浮点值获取最近的位置。从给定的浮点值中查找ArrayList中的最近位置

我有一个ArrayList的城市有拉特/长。我想要做的是从给定的坐标中找到最近的城市。

public class City { 
     private float lat; 
     private float lng; 
     //getters & setters 
    } 

    List <City> cities; // at this point "cities" contains several "city" 
    City city; 



    city = findNearest(lat, lng); 
    private City findNearest(float lat, float lng) { 
     for (City c: cities) {} 
    } 
+0

只需用[数学](https://www.mathsisfun.com/algebra/distance-2-points.html)计算点X和点Y之间的差异并将最小的一个存储在变量中。 – SomeJavaGuy

+0

使用一个变量来跟踪您认为哪一个最接近并在您循环时更新它。对于每个城市,找到距离。如果它比您以前认为最接近的那个更接近,请将其分配给变量。另外,不要发布无意义的代码碎片。 – khelwood

+0

你的方法是什么?找到两个地理坐标之间的距离比@KevinEsche提到的稍微复杂一点,但简单的距离是一个好的开始。 – f1sh

回答

3

尝试计算简单的偏差:

private City findNearest(float lat, float lng) { 
     float minDist = Float.MAX_VALUE; 
     City resCity = null; 
     for (City c: cities) { 
      float dist = Math.pow(c.getLat() - lat, 2) + Math.pow(c.getLng() - lng, 2); 
      if (dist < minDist){ 
      minDist = dist; 
      resCity = c; 
      } 
     } 
    return resCity; 
    } 

你可以从DIST采取Math.sqrt,但实际上是没有意义的。