【发布时间】:2013-01-28 06:48:57
【问题描述】:
我的核心数据中有一些地址,我需要获取它们的纬度和经度。地址的数量约为 150 到 200 个。我在线程 iPhone iOS5 CLGeocoder how to geocode a large (200) set of addresses? 中读到 iOS 将您限制为每分钟 50 个地理编码。我需要知道如何在那一分钟内触发 50 个地理编码,然后再触发 50 个,依此类推。执行代码我得到以下错误:
Geocode 失败并出现错误:Error Domain=kCLErrorDomain Code=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];
}
}];
}
【问题讨论】:
标签: ios objective-c geocoding delay