我的核心数据中有一些地址,我需要获取它们的纬度和经度。地址的数量大约在 150 到 200 之间。我在iPhone iOS5 CLGeocoder 如何对一大组(200)地址集进行地理编码?. 我需要知道如何在那一分钟内触发 50 个地理编码,然后再触发 50 个,依此类推。执行代码我得到以下错误:
地理编码失败并出现错误:错误域 = kCLErrorDomain 代码 = 2“操作无法完成。(kCLErrorDomain 错误 2。)”
用户 nob1984 在我提到的线程中提出了一个可能的解决方案:
如果您需要一次对所有内容进行地理编码,则需要将地理编码与每个块之间的延迟链接在一起,并在完成之前显示某种忙碌指示符。使用大量地理编码可能需要一段时间。
但我不知道如何使这些延迟正常工作。欢迎任何帮助和建议!谢谢
这是代码:
...
NSArray *arrayOfRoutePoints = fetchedObjects;
[self geolocateGroup:arrayOfRoutePoints];
...
- (void)geolocateGroup:(NSArray *)array {
for (RoutePoint *rp in array) {
if ([rp.addressLatitude intValue] == 0) {
dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
[self geolocateRoutePoint:rp];
dispatch_group_leave(group);
while(dispatch_group_wait(group,DISPATCH_TIME_NOW)){
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate dateWithTimeIntervalSinceNow:3.0f]];
}
}
}
}
- (void)geolocateRoutePoint:(RoutePoint *)c {
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
NSString *addressString = [NSString stringWithFormat:@"%@,%@ %@ %@ %@",
c.addressName,
c.addressNumber,
@"SOME CITY",
@"SOME STATE",
@"SOME COUNTRY"];
[geocoder geocodeAddressString:addressString
completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
NSLog(@"Geocode failed with error: %@", error);
return;
}
if (placemarks && placemarks.count > 0)
{
CLPlacemark *placemark = placemarks[0];
CLLocation *location = placemark.location;
c.addressLatitude = [NSNumber numberWithDouble:location.coordinate.latitude];
c.addressLongitude = [NSNumber numberWithDouble:location.coordinate.longitude];
}
}];
}