2

緯度と経度に基づいてユーザーの現在地を見つけたい。以前は MKReverseGeocoder を使用して実行していましたが、ios5 で非推奨になっているため、CLGeocoder を使用します。しかし、現在の場所を取得できません。

- (void)viewDidLoad
{
 locationManager = [[CLLocationManager alloc] init];
        [locationManager setDelegate:self];
        [locationManager setDistanceFilter:kCLDistanceFilterNone];
        [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
        [locationManager startUpdatingLocation];

}
- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    CLLocation *currentLocation = newLocation;

    locationLabelOne=newLocation.coordinate.latitude;


    locationLabelTwo=newLocation.coordinate.longitude;
    geocoder = [[CLGeocoder alloc] init];


    [locationManager stopUpdatingLocation];

    [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {
        NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
        if (error == nil && [placemarks count] > 0) {
            placemark = [placemarks lastObject];
           NSString *get = [NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@",
                                 placemark.subThoroughfare, placemark.thoroughfare,
                                 placemark.postalCode, placemark.locality,
                                 placemark.administrativeArea,
                                 placemark.country];
        } else {
            NSLog(@"%@", error.debugDescription);
        }
    } ];
    NSLog(@"%@",placemark);
}

NSLog のプレースマークを作成すると、null が返されます。

4

2 に答える 2

2

考えられる問題:

1) locationManager:didUpdateToLocation:fromLocationは非推奨の iOS 6.0 であり、locationManager:didUpdateLocations:代わりに使用する必要があります。

 - (void)locationManager:(CLLocationManager *)manager
 didUpdateLocations:(NSArray *)locations
{
     currentLocation=[locations lastObject];
     // rest code will be same
 }

2) [locationManager stopUpdatingLocation];怪しい音もします。IMO メソッドでは使用しないでくださいCLLocationManagerDelegate

PS

i) フォワード/リバース ジオコーディングの詳細については、Apple のサンプル コードGeocoderDemoを参照してください。

ii) リバース ジオコーディングに Google API を使用すると、何年にもわたって利用可能なすべてのデータが得られますがCLGeocoder、通りの名前、インドなどの国の PIN コードなどの完全なデータは得られません。リバース ジオコーディング リクエストを実行すると、バックグラウンドで Web サービスに接続する Core Location に座標が渡され (開発者にはわかりません)、ユーザーが読み取れるアドレスが返されます。そのため、この Web サービスは GOOGLE API ほど正確なデータを返すことができない可能性があります。

于 2013-03-15T07:43:15.170 に答える
0

私は同じ問題を抱えていましたが、いくつかの実験で問題を解決しました...</p>

-90 < 緯度 < 90 -180 < 経度 < 180 であることを確認してください。

基本的な mod 機能を実行していないようです。それが役立つことを願っています...

于 2013-11-08T20:05:22.993 に答える