2012-03-13 3 views
3

GPS를 사용하여 걷는 동안 사용자가 가리는 거리를 계산하고 싶습니다. 예를 들어, 사용자가 시작 버튼을 두 드렸을 때보 다 걷거나 뛰기 시작합니다. 다른 lat를 오랫동안 사용하기 위해 사용자가 여행해야하는 최소 거리는 얼마입니까?iPhone : GPS를 사용하여 걷는 동안 거리를 계산하십시오.

어떻게 아이폰에서 할 수 있습니까? 우리는 점을 찍었습니다. 마지막으로 0.3 초마다 점을 찍었습니다.

+0

gps 위치 사이의 거리를 계산하는 것은 쉽습니다. 그 밖의 모든 것은 매우 어렵습니다. 특히 느린 속도로 거리를 추적하려는 경우 측정을 자주하면 더 많은 오류가 누적됩니다. 천천히 움직이면 거리 당 더 많은 오차가 누적됩니다. [surveyor 's wheel] (http://en.wikipedia.org/wiki/Surveyor's_wheel)을 가져 와서 실제 세계에서 알고리즘을 테스트하십시오. 당신은 잘못된 GPS가 얼마나 궁금 할 것입니다. –

+0

질문의 가장 중요한 부분 (적어도 .. 이상)은 여전히 ​​답이 없습니다. "다른 위도를 길게하려면 최소한의 거리를 이동해야합니까?" 다시 말하면, GPS가이 변위를 인정하고 여행 거리를 계산할 것인가? (1, 2, 5, 5 미터 미만이라 할지라도). –

답변

3
당신은 2 점 (위도, 경도) 사이의 거리를 계산하여이 작업을 수행 할 수

:

(내가 그것을 테스트하지 않았습니다) :

-(double)distanceBetweenCoordinate:(CLLocationCoordinate2D)c1 andCoordinate:(CLLocationCoordinate2D)c2 { 
    double long1 = degreesToRadians(c1.longitude); 
    double lat1 = degreesToRadians(90 - c1.latitude); 

    double long2 = degreesToRadians(c2.longitude); 
    double lat2 = degreesToRadians(90 - c2.latitude); 

    double gamma = fabs(long1 - long2); 
    if (gamma > M_PI) { 
     gamma = 2 * M_PI - gamma; 
    }  

    double result = cos(lat2) * cos(lat1) + sin(lat2) * sin(lat1) * cos(gamma); 
    return acos(result) * 6366.1977; // Kilometers 
}; 

CGFloat degreesToRadians(CGFloat degrees) { 
    return degrees * M_PI/180; 
}; 

UPDATE : 대신 distanceFromLocation - Calculate distance between two points을 사용하십시오.

+6

또는 CLLocation 메서드를 사용하십시오. - (CLLocationDistance) distanceFromLocation : (const CLLocation *) 위치 – sosborn

+0

더 나은 접근 방법 : p CoreLocation 또는 MapKit 프레임 워크에 대한 경험이 많지 않습니다. 그래서 나는 옛날 PHP 함수 풀에서 고기를 낚았습니다. – basvk

+0

이것은 총 거리가 아닌 "직선"거리 (새가 날리는대로)입니다. – lnafziger

관련 문제