2012-04-12 5 views
1

기본적으로 아이폰이 고정밀 도로 가리키는 방향을 알고 싶습니다. CLLocationManager를 사용해 보았습니다. 문제는 CLHeading.magneticHeading이 예를 들어 36.44323과 같은 double을 반환하지만 그 다음에 장치 회전을 시작할 때 CLLocationManager는 방향에 도달 할 때만 업데이트합니다. 1도이므로 숫자는 36.44323, 37.44323, 38.44323과 같이 읽습니다. 정확성을 더 높일 수 있습니까?iOS 나침반에서 정확도 미만을 획득 할 수 있습니까?

+0

'CLLocationManager'에'desiredAccuracy'를'kCLLocationAccuracyBestForNavigation'으로 설정 했습니까? 이것은 자력계 (예 : 자이로) 이상을 활용합니다. 아마 이것은 당신에게 더 나은 정확성을 줄 것입니까? – larsacus

+0

네 테스트되었지만 결과가 동일합니다, 나는 또한 행운과 함께 이러한 짓을 : 1 - headingFilter보다 작게 설정하고 또한 kCLHeadingFilterNone, 2 설정 - CLLocationManager 데이터를 수동으로 업데이트 및 3 - didUpdateHeading 메서드가 끝날 때 stopUpdatingHeading을 호출하고 별도의 스레드를 사용하여 다시 켜기는하지만 결과가 안정되는 데는 시간이 걸리기 때문에 결과가 안정적이지 않습니다. – sadegh

답변

1

아니, 아니.

정확도와 정확성을 혼동하지 마십시오. 단지 36.44323이 그것이 소수점 5 자리까지 정확하다는 것을 의미하지는 않는다. 그 값의 오차 범위는 ± 1 도일 수있다. (

나는 iPhone의 나침반이 충분히 정확하다고 말할 수 없다. 어떤 방향으로 당신이 원하는 정확도를 가리키고 있는지 확실하게 말하십시오.

+2

숫자의 정확성에 대해서는 신경 쓰지 않지만 장치의 방향에 대한 아주 작은 변화에 관심이 있습니다. 숫자가 정수가 아닌 두 배가되는 이유가 있어야합니다. – sadegh

1

정확도는 중요하지 않지만 방향의 작은 변화에 관심이 있다면 CMMotionManager을 볼 수 있습니다. 장치의 attitude (특히 yaw)을 가져올 수있는 속성 (deviceMotion)입니다. & 자기 머리글 사이의 차이 (예 : x)를 기록하면 각 헤딩 업데이트에서 업데이트 간 대략적인 제목을 yaw + x으로 얻을 수 있습니다. deviceMotionUpdateInterval을 직접 설정할 수 있으므로 CMMotionManager에서시기 적절하게 업데이트됩니다.

난 당신이 자기 제목을 반환합니다 CLLocationManagerx을 계산할 때도 다시 변환해야합니다 있도록 올바르게 yaw 값이 -pi와 PI 사이의 라디안으로 반환 기억하는 경우도 (360-0)입니다.

장치 방향을 조정할 수도 있습니다. 나침반은 장치 상단에서 표제 데이터를 반환합니다. 따라서 가로 방향 왼쪽에있는 경우 표제 값 인 horizontalLight에서 90 °을 뺄 필요가 있습니다. 표제 값에 90 °을 추가해야하며 portraitUpsideDown은 180 ° .

0

정확성이 더 필요하면 자이로를 사용해야합니다. CoreMotion의 장치 모션 데이터가 도움이 될 것입니다. 나침반 정말 정확하지 않습니다.

4

CLLocationManagerheadingFilter ~ kCLHeadingFilterNone 또는 기본값 1보다 작은 값을 설정하십시오.

+0

정밀도가 향상되지 않습니다. 더 자주 업데이트됩니다. –