0

文字列に対してフォワード ジオコードを実行しようとしていますが、通常は問題なく動作しますが、「バンクーバー」などの一部の場所では、結果の目印の地域に対して null が返されますが、国、州、および座標が返されます。フォワード ジオコーディングで見つけた座標をリバース ジオコーディングしてみましたが、失敗することはありませんでしたが、別の場所「Port Moody」が返されました。

最も奇妙な部分は、Geocoder の Apple のサンプル コードを使ってバンクーバーを実行しようとしたところ、問題なく動作したことです。地方はヌルにならない。

また、テストしていたらいきなり動き始め、再度確認したら動かなくなってしまいました。何を与える?

これが私のコードです。しかし、それが大いに役立つことは間違いありません。

-(BOOL) textFieldShouldReturn:(UITextField *)textField {
     CLGeocoder *geocoder = [[CLGeocoder alloc] init];

     [geocoder geocodeAddressString:textField.text completionHandler:^(NSArray *placemarks, NSError *error) {
    self.placemark = [[MKPlacemark alloc] initWithPlacemark:[placemarks objectAtIndex:0]];
    if (error) {
        NSLog(@"Geocode error %@",error.debugDescription);
        [self alertForFailedGeocode];
        return;
    }
    if (self.placemark.locality == nil || self.placemark.country == nil) {
        //eg if you search "Canada" you'll get a nil locality, and the coordinate is in the middle of nowhere.

        if (self.placemark.location) {
            [geocoder reverseGeocodeLocation:self.placemark.location completionHandler:^(NSArray *placemarks, NSError *error) {
                if (error) {
                    [self alertForFailedGeocode];
                    return;
                }

                self.placemark = [placemarks objectAtIndex:0];
                [self alertForConfirmGeocode:[self locationStringForPlacemark:self.placemark]];
                self.location = self.placemark.location;
                self.isUsingCurrentLocation = FALSE;
                return;
            }];
            return;
        }
        else {
            NSLog(@"Geocode failed BECAUSE nil locality or country or both");
            [self alertForFailedGeocode];
            return;
        }
    }

    NSLog(@"%d places found",placemarks.count);
    [self alertForConfirmGeocode:[self locationStringForPlacemark:self.placemark]];
    self.location = self.placemark.location;
    self.isUsingCurrentLocation = FALSE;
}];
return YES;

}

4

1 に答える 1