2011-11-23 2 views
2

나는 사용자가 걸어 다니면서 고정 된 지점으로부터 사용자의 거리를 보여주는 응용 프로그램을 작성하고 있습니다. 즉 사용자와의 거리를 보여주는 레이블이 사용자가 이동할 때마다 업데이트 됨).사용자가 움직이는 동안 거리까지의 거리

- (void)viewDidLoad 
{ 
    locationManager=[[CLLocationManager alloc]init]; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    [locationManager startUpdatingLocation];  
} 

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation  *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    CLLocationDistance meters = [newLocation distanceFromLocation:fixedPoint]; 
    self.distanceLabel.text = [[NSString alloc] initWithFormat:@"Distance: %.1f feet", meters*3.2808399]; 
} 

지속적으로 업데이트되지 않은 시점에 사용자로부터의 거리를 표시하도록되어 있으며이 업데이트 될 때 라벨, 그것은 일반적으로 표시되지 않습니다 : 나는 아래의 코드로 CLLocationManager를 사용 사용자로부터 고정 점까지의 정확한 거리. 나는 이것을 시도하거나 할 수있는 더 좋은 방법이 있는지 궁금 해서요. 핵심 위치 틀의 근본적인 한계로 인해 이것을 불가능하게 만들었습니다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

이 위치 (newLocation 및 oldLocation)를 로그에 기록하여 값을 검사 할 수 있습니다. 피트에서 좋은 측정 값을 얻기에 충분하지 않을 가능성이 있습니까? 또한 Apple에 따르면 iOS 장치는 먼저 Wi-Fi에 연결되고 Cell Towers가 뒤 따르며 사용자 위치를 결정할 때 GPS 위성이 연결됩니다. Wi-Fi가 셀 타워보다 빠르게 연결되고 Cell Towers가 GPS 위성에 연결되기 때문입니다. 장치는 순서대로 장치에 연결하면 응답 성이 향상 될 수 있습니다. 그것은 당신의 문제의 일부일 수 있습니다. – RLH

+0

실제 코드입니까? 위치 관리자의 위임이 설정된 위치가 표시되지 않습니다 (대리자 메서드가 호출되지 않는 경우). 고정 포인트는 어떻게 설정됩니까? – Anna

+0

네, 위임자를 설정하고 fixedPoint는 테스트 목적으로 임의의 좌표로 초기화됩니다. 나는 RLH가 제안한 것을 시도했는데 로그에 기록 된 포인트가 퍼져서 내 목적에 충분히 정확하지 않았습니다. 나는 내가하려는 일이 휴대 전화가 현재 위치를 결정하는 데 사용하는 메커니즘의 한계를 넘어서는 것일 수 있다는 인상을 받고 있습니다. – InsaneOstrich

답변

3

이전 (캐시 된) 위치를 필터링하고 있습니까? 정확도를 기준으로 필터링해야하는데 정확도가 낮은 위치는 원하지 않을 것입니다.

콜백은 위치가 변경된 경우에만 계속되거나 정기적으로 업데이트되지 않습니다.

장치가 GPS를 가지고 있고 충분한 위치를 얻기에 충분한 GPS 위성을 볼 수 있다고 가정하면 정상적으로 작동합니다.

-(void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation { 

    NSTimeInterval age = -[newLocation.timestamp timeIntervalSinceNow]; 

    if (age > 120) return; // ignore old (cached) updates 

    if (newLocation.horizontalAccuracy < 0) return; // ignore invalid udpates 

    ... 
} 
관련 문제