2017-11-24 23 views
0

그래서 ArrayList에 GPS 위도와 경도 저장소를 기반으로 계산 된 마일을 계산하기위한 코드를 작성하고 있지만 어떤 이유로 무작위로 내가 NaN을 얻었고 그 이유를 알 수 없습니다. 누군가 내 코드에 무엇이 잘못된지 알려주거나 내가해야 할 더 좋은 방법이 있다면 알려 주실 수 있습니까?거리에서 안드로이드 NaN

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

나는 또한 폴리 라인을 그릴 같은 포인트를 사용하고 그것을 잘 작동합니다.

답변

0

Location.distanceBetween() 방법을 사용하는 것이 좋습니다. 당신이 NaN을 얻을 것이다

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

가능성은 경도 값으로 인해 또는 위도 null 또는 비어 있습니다. ArrayList에있는 모든 GPS 위도 및 경도 저장소에 대한 로그를 캡처하십시오.

+0

폴리 라인을 올바르게 그렸을지라도? – user2101081

+0

포인트 중 하나가 arraylist의 NaN (숫자가 아님) 인 경우 폴리 라인의 일부분을 그리는 것으로 건너 뜁니다. – YinKiet

+0

폴리 라인을 그리는 코드는 예외적 인 경우가 없습니다. – user2101081