2015-11-19 2 views
-2

У меня есть несколько местоположений и вы хотите найти широту и долготу с карты baidu. Возможно ли, что я могу отправить несколько адресов в один вызов API, и он возвращает мне все латы и длинные несколько мест? Или мне нужно вызывать API несколько раз? Поскольку это не очень хорошо. Пожалуйста, предложите и дайте мне решение для этого. Я придерживался кода отсюда, чтобы интегрировать карту baidu: https://github.com/SemperIdem/BaiduMapSDKDemo-SwiftКак получить лат и долго от карт baidu для нескольких мест?

+1

Добавить комментарий, если мой вопрос неправильно не вниз голосовать прямо, говоря первый, почему вы считаете его не действительным –

+0

Это вопрос о его BaiduMap API. На мой взгляд, лучше спросить их или найти их документацию. – Moritz

ответ

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