2016-08-09 123 views
-2

Ich frage mich, wie ich den nächsten Ort aus gegebenen Float-Werten erhalten könnte.Finde den nächsten Ort in einer ArrayList aus gegebenen Float-Werten

Ich habe eine ArrayList von Städten, die lat/long haben. Was ich tun möchte ist, die nächstgelegene Stadt anhand der angegebenen Koordinaten zu finden.

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

berechnen Sie einfach die Differenz zwischen Punkt X und Punkt Y mit [math] (https://www.mathsisfun.com/algebra/distance-2-points.html) und speichern Sie den kleinsten in einer Variablen. – SomeJavaGuy

+0

Verwenden Sie eine Variable, um zu verfolgen, welche Ihrer Meinung nach am nächsten ist, und aktualisieren Sie sie, während Sie die Schleife durchlaufen. Finde für jede Stadt die Entfernung. Wenn es näher ist als das, von dem Sie bisher dachten, dass es am nächsten ist, weisen Sie es der Variablen zu. Veröffentlichen Sie auch keine Code-Fragmente, die keinen Sinn ergeben. – khelwood

+0

Was ist Ihr Ansatz? Die Entfernung zwischen 2 Geo-Koordinaten zu finden, ist ein wenig komplizierter als @KevinEsche, aber die einfache Distanz ist ein guter Anfang. – f1sh

Antwort

3

Versuchen einfache Abweichung zu berechnen:

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; 
    } 

Sie Math.sqrt von dist nehmen konnte, aber eigentlich gibt es keinen Sinn.