2014-01-27 2 views
1

나는 SQLite를 사용하는 데이터베이스에 GPS를 통해 구동 경로를 추적하기위한 응용 프로그램을 만들고 있습니다. 현재 위치가 변경되면 데이터 (위도, 경도, 날짜)가 데이터베이스에 저장되므로 데이터베이스에 많은 좌표 + 날짜 목록이 있습니다.안드로이드 java 거리를 계산 sqlite에서 많은 좌표

이제 전체 경로의 거리를 계산하고 싶습니다. 나는 시작과 끝 위치와 중간 위치를 안다. 두 위치 사이의 거리를 계산하는 방법도 알고 있습니다. 모든 구간의 거리를 계산하는 방법을 모르겠습니다. 누군가 나를 도울 수 있습니까? 당신이 어려움을 겪고 있기 때문에

private double calculateDistance(double fromLong, double fromLat,double toLong, double toLat) { 
    double d2r = Math.PI/180; 
    double dLong = (toLong - fromLong) * d2r; 
    double dLat = (toLat - fromLat) * d2r; 
    double a = Math.pow(Math.sin(dLat/2.0), 2) + Math.cos(fromLat * d2r) 
      * Math.cos(toLat * d2r) * Math.pow(Math.sin(dLong/2.0), 2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    double d = 6367000 * c; 
    return Math.round(d); 

} 
+0

내가 두 좌표 사이에 계산할 수 있습니다,하지만 난 완 :

select lat, lon from position order by save_date 

당신은 다음과 같은 세그먼트를 요약 할 수 있습니다

는이 같은 준비된 문이 가정 : 이것은 시작이다 계산할 전체 경로 –

+0

각 세그먼트 및 합계를 계산해야합니다. 이것은 또한 오류가 합쳐지기 때문에 복잡합니다. – KarlP

+0

나는 그것에 대해서도 생각하고 있었지만 어떻게 목록이나 이와 비슷한 것이 있는지 모르겠습니다. –

답변

0

OK :

이 내가 두 위치 사이의 거리를 계산하는 방법이다. '

double total = 0.0; 
double a_lat; 
double a_lon; 


// first lat 
if(rs.next() == false) return 0.0; // nothing in db. 

a_lat = rs.getDouble("lat"); 
a_lon = rs.getDouble("lon"); 

while(rs.next()) { 
    b_lat = rs.getDouble("lat"); 
    b_lon = rs.getDouble("lon"); 

    double segment = calcLength(a_lat, a_lon, b_lat, b_lon); 
    if(segment < MINIMUM_SEG_LENGTH) { 
     continue; // skip this point, it's too close to the previous. 
    } 
    total+=segmentLength; 

    a_lat = b_lat; // oops, forgot this. 
    a_lon = b_lon; 
} 

return total; 
+0

세그먼트가 짧으면 누적 오류로 인해 전체 길이가 정확하지 않습니다. 세그먼트 길이가 너무 작 으면 포인트를 건너 뛰는 것이 가장 좋습니다. – KarlP

+0

감사합니다. –