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.
Obwohl es die Polylinie korrekt zeichnet? – user2101081
Ich nehme an, Ihre Codierung überspringen, um einen Teil der Polylinie zu zeichnen, wenn einer der Punkt ist NaN (keine Nummer) in Arraylist – YinKiet
Die Codierung zum Zeichnen der Polylinie ist nur eine while-Schleife gibt es keine Ausnahmen auf Null – user2101081