У меня есть несколько местоположений и вы хотите найти широту и долготу с карты baidu. Возможно ли, что я могу отправить несколько адресов в один вызов API, и он возвращает мне все латы и длинные несколько мест? Или мне нужно вызывать API несколько раз? Поскольку это не очень хорошо. Пожалуйста, предложите и дайте мне решение для этого. Я придерживался кода отсюда, чтобы интегрировать карту baidu: https://github.com/SemperIdem/BaiduMapSDKDemo-SwiftКак получить лат и долго от карт baidu для нескольких мест?
-2
A
ответ
0
Мы не можем поместить адресный массив, потому что [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];
Добавить комментарий, если мой вопрос неправильно не вниз голосовать прямо, говоря первый, почему вы считаете его не действительным –
Это вопрос о его BaiduMap API. На мой взгляд, лучше спросить их или найти их документацию. – Moritz