2017-01-26 9 views
0

私は内部のクエリをやって入手:ユーザー最終的な場所IOS

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ 
    if (!gotLocation){ 
     gotLocation = true; 
     [locationManager stopUpdatingLocation]; 
     // DO QUERY 
    } 
} 

しかしを、私は、最終的な場所が設定されている場合、またはより正確な1が行われたときに知っていただきたいと思います。私は一度クエリをしようとしているし、クエリの正確な場所が必要です。私は[locations lastObject]を使うことができると知っていますが、最終的な場所やより正確な場所がどのように設定されるかはどのように判断できますか?

答えて

0

ロケーションのhorizontalAccuracyを確認できます。値が小さいほど正確です。新しい場所が到着したときに受信した最後の場所への参照を保持する必要があります。より正確な場合はhorizontalAccuracyが小さくなり、参照が更新されます。

次に、horizontalAccuracyが十分に近い場所を受け取ると、住所があるのでstopUpdatingLocationに電話をかけてからクエリを実行できます。例えば

:助け

CLLocation *location = [locations lastObject]; 
if (location.horizontalAccuracy < self.lastLocation.horizontalAccuracy) { 
    self.lastLocation = location; 
    if (self.lastLocation.horizontalAccuracy <= kDesiredLocationAccuracy) { 
     // execute query or additional logic 
     [locationManager stopUpdatingLocation]; 
    } 
} 

願っています!

+0

タイマーやその他の制限を追加する必要があります。希望の精度に到達できない可能性があるからです。あなたがiOS9以降をターゲットにしてうれしいなら、あなたは 'requestLocation'を使うことができ、すべての苦労はあなたのために行われます。 – Paulw11

+0

@ Paulw11、あなたの提案は面白いです。あなたがそのタイマーの例を掲載して、望ましい精度がどんなに良くなっていないかをチェックすることができれば大丈夫ですか? –

+0

個人的には、iOS 9を最小限に絞り込み、 'requestLocation'を使用します – Paulw11