我有多个位置,想从百度地图上查找经纬度。有没有可能我可以在 1 个 API 调用中发送多个位置,它会返回多个位置的所有纬度和经度?或者我需要多次调用 API?因为这不是一个好方法。请提出建议并给我解决方案。我已按照此处的代码集成百度地图:https ://github.com/SemperIdem/BaiduMapSDKDemo-Swift
问问题
1333 次
1 回答
1
我们不能放置地址数组,因为 [geocoder geocodeAddressString: completionHandler:]
使用字符串值。我们必须以
同步的方式使用异步地理编码请求,然后您只需将请求添加到串行队列中,请求将按顺序执行而不是并行执行。
CLGeocoder *geocoder = [[CLGeocoder alloc]init];
NSMutableArray *mapItems = [NSMutableArray array];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
queue.maxConcurrentOperationCount = 1; // make it a serial queue
NSOperation *completionOperation = [NSBlockOperation blockOperationWithBlock:^{
[MKMapItem openMapsWithItems:mapItems launchOptions:nil];
}];
NSArray *addresses = @[@"Mumbai, India", @"Delhi, India", @"Bangalore, India"];
for (NSString *address in addresses) {
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else if ([placemarks count] > 0) {
CLPlacemark *geocodedPlacemark = [placemarks objectAtIndex:0];
MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:geocodedPlacemark.location.coordinate
addressDictionary:geocodedPlacemark.addressDictionary];
MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
[mapItem setName:geocodedPlacemark.name];
[mapItems addObject:mapItem];
}
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
}];
[completionOperation addDependency:operation];
[queue addOperation:operation];
}
[[NSOperationQueue mainQueue] addOperation:completionOperation];
于 2015-11-19T10:51:39.753 回答