2016-08-11 3 views
-3

I viele bezwecken mit koordinieren (zB 600-1000) Beispiel:X und Y-Koordinate mit - Algorithmus

coordX - 16.88799654 
coordY - 53.452535636 

coordX - 16.78799652 
coordY - 53.1436346423 

coordX - 17.06546333 
coordY - 52.96543332 

..... 

Benutzer seine eigenen Koordinaten X und Y beispielsweise hinzu:

userX = 12.4669945 
userY = 52.234534536 

Jemand hat eine Idee, wie man einen Algorithmus schreibt, um das nächste in gerader Linie Objekt für die Liste aller Objekte zu bekommen?

+0

Was versuchen Sie zu tun? – learner0000

+0

Ich habe eine Karte von Bushaltestellen, Benutzer geben seine Koordinaten und Algorithmus finden ihn eine nächste Bushaltestelle. –

+1

Berechnen Sie den Abstand von Ihrem Ausgangspunkt zu allen Punkten und wählen Sie den nächsten aus. * Bitte * frage nicht, wie man die Entfernung zwischen den Punkten berechnet !! – Andreas

Antwort

0

Ich gehe davon aus, dass die Koordinaten geodätisch (lat/lon) sind, so dass ein einfacher euklidischer Abstand nicht korrekt ist. Das Folgende ist in C#, ich hoffe, dass Sie in Java übersetzen können. Sie können auf Wunsch auch eine einzelne Funktion vereinfachen.

private const double EARTH_RADIUS_MI = 3959; //In statute miles 

    public static float Radians(double degrees) 
    { 
     return (float)(degrees * (Math.PI/180)); 
    } 

    public static double CalculateDistance(Coordinates fromPoint, Coordinates toPoint) 
    { 
     double dLat = Radians(toPoint.Latitude - fromPoint.Latitude); 
     double dLon = Radians(toPoint.Longitude - fromPoint.Longitude); 

     double a = Math.Sin(dLat/2) * Math.Sin(dLat/2) + 
      Math.Cos(Radians(fromPoint.Latitude)) * Math.Cos(Radians(toPoint.Latitude)) * 
      Math.Sin(dLon/2) * Math.Sin(dLon/2); 

     double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a)); 

     return EARTH_RADIUS_MI * c; 
    } 
Verwandte Themen