iOS中使用CLGeocoder的前向地理编码为某些位置的位置返回null



我正在尝试对字符串执行正向地理编码,它通常可以正常工作,但对于某些位置,如"温哥华",它会为生成的位置标记的位置返回null,但它确实会返回国家、省和坐标。我甚至尝试对我从正向地理编码中找到的坐标进行反向地理编码,尽管没有失败,但它返回了一个不同的位置,"穆迪港"。

最奇怪的是,我试着通过苹果公司的Geocoder示例代码运行Vancouver,它运行得很好。该位置不会显示为null。

此外,我正在测试它,它突然开始工作,然后我再次检查,它停止了工作。什么东西?

这是我的密码。不过,我怀疑这会有多大帮助。

-(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;

}

地理编码操作不在设备上处理,并且需要互联网连接,因为它们发生在云上。它有优点也有缺点。

优点:

  1. 保存您的设备资源,因为转换正在云端进行
  2. 随着技术的进步,苹果可以在云上更新他们的API,这可以为我们的应用程序提供更好的性能,甚至不需要更改代码中的任何内容

缺点:

您将需要一个坚实的互联网连接来访问地理编码API。

现在到了你的情况,我想是由于互联网连接的原因,你无法完全使用地理编码API。也许这就是你没有得到当地的原因。

那么问题是,你是如何获得国家、省份和坐标的?

事实上,前向地理编码器可以让你达到更高的水平基于本地设备的国家、地区等信息信息,但它需要互联网连接才能获得更多位置等信息。

相关内容

  • 没有找到相关文章

最新更新