CLLocationManager がキャッシュされた場所を自動的に返さないようにする方法があるかどうか疑問に思っています。ドキュメントに「位置情報サービスは可能な限り迅速に初期位置を返し、利用可能な場合はキャッシュされた情報を返す」と書かれていることは理解していますが、このキャッシュされた位置はユーザーの現在の位置から非常に遠く離れている可能性があり、可能であればより正確な位置を希望します。
助けてくれてありがとう!
CLLocationManager がキャッシュされた場所を自動的に返さないようにする方法があるかどうか疑問に思っています。ドキュメントに「位置情報サービスは可能な限り迅速に初期位置を返し、利用可能な場合はキャッシュされた情報を返す」と書かれていることは理解していますが、このキャッシュされた位置はユーザーの現在の位置から非常に遠く離れている可能性があり、可能であればより正確な位置を希望します。
助けてくれてありがとう!
キャッシュを止めることはできませんが、キャッシュされたデータを除外することは難しくありません。Core Location には、その場所のタイムスタンプが含まれます。場所のタイムスタンプを、アプリの起動時に保存されたタイムスタンプと比較すると、古い場所 (キャッシュされており、アプリが表示される前に見つかった場所) と新しい場所がわかります。古いものは捨ててください。
場所のタイムスタンプは NSDate であるため[NSDate date]
、アプリの起動時の値を取得し、それを場所をフィルタリングする際の基準点として使用します。新しいデータを取得し始めたら、参照値を破棄して、新しい場所が信頼されるべきであることを意味するものとして nil 参照日を扱うことさえできます。
-(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation
{
if ([newLocation.timestamp timeIntervalSinceNow] > -10.0) // The value is not older than 10 sec.
{
// do something
}
}
ここで私の答えを参照してください: cllocationのキャッシュを削除する方法は? 「cllocationのキャッシュを削除する方法」について。これにより、CLLocationManagerのキャッシュに関する問題が解決するはずです。
CLLocationManager のこのプロパティを使用できます。
@property(readonly, NS_NONATOMIC_IPHONEONLY) CLLocation *location;
このプロパティの値はnil
、位置データが取得されていない場合です。それ以外の場合、これは CoreLocation がそのデータをキャッシュする場所です。したがって、常にゼロから始めたい場合は、このプロパティが有効かどうかを確認してくださいnil
。の場合nil
は問題ありません。それ以外の場合は、ロケーション マネージャーを停止して再度開始する必要があります。これにより更新が強制され、キャッシュされた値がトリガーしたばかりの新しい値で上書きされます。