2017-11-24 6 views
0

So schreibe ich einen Code, um die gefahrenen Meilen basierend auf dem GPS Breiten- und Längengrad in einem ArrayList zu berechnen, aber aus irgendeinem Grund zufällig bekomme ich die NaN und ich kann nicht herausfinden, warum. Könnte mich jemand bitte wissen lassen, was mit meinem Code nicht stimmt oder ob es einen besseren Weg gibt, den ich tun sollte?Android NaN auf Abstand

protected float calculateMiles() 
{ 
    float totalDistance = 0; 

    for(int i = 1; i < points.size(); i++) { 
     double lat = points.get(i).latitude; 
     double lng = points.get(i).longitude; 

     double lat2 = points.get(i-1).latitude; 
     double lng2 = points.get(i-1).longitude; 
     totalDistance += distance(lat, lng, lat2, lng2); 
    } 

    return totalDistance; 
} 

    private double distance(double lat1, double lon1, double lat2, double lon2) { 
    double theta = lon1 - lon2; 
    double dist = Math.sin(deg2rad(lat1)) 
      * Math.sin(deg2rad(lat2)) 
      + Math.cos(deg2rad(lat1)) 
      * Math.cos(deg2rad(lat2)) 
      * Math.cos(deg2rad(theta)); 
    dist = Math.acos(dist); 
    dist = rad2deg(dist); 
    dist = dist * 60 * 1.1515; 
    return (dist); 
} 

private double deg2rad(double deg) { 
    return (deg * Math.PI/180.0); 
} 

private double rad2deg(double rad) { 
    return (rad * 180.0/Math.PI); 
} 

Ich verwende auch die gleichen Punkte, um eine Polylinie zu zeichnen, und es funktioniert gut.

Antwort

0

Ich empfehle Ihnen, die Location.distanceBetween() Methode zu verwenden.

float[] result = new float[1]; 
Location.distanceBetween(lat, lng, lat2, lng2, result); 
totalDistance += result[0]; 
0

Die Möglichkeit, Sie NaN erhalten wird, ist aufgrund Longtitude oder Latitude ist null oder leer. Bitte erfassen Sie das Protokoll für alle GPS-Längen- und Breitengradspeicher in ArrayList.

+0

Obwohl es die Polylinie korrekt zeichnet? – user2101081

+0

Ich nehme an, Ihre Codierung überspringen, um einen Teil der Polylinie zu zeichnen, wenn einer der Punkt ist NaN (keine Nummer) in Arraylist – YinKiet

+0

Die Codierung zum Zeichnen der Polylinie ist nur eine while-Schleife gibt es keine Ausnahmen auf Null – user2101081