2016-08-09 63 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,但實際上是沒有意義的。