Стратегия выполнения многих запросов на геокодирование

У меня есть приложение, которое должно преобразовать многие адреса в CLPlacemark, чтобы получить широту / долготу. В документации Apple объясняется, что мы не должны выполнять много запросов GeoCode, запросы на геокодирование ограничены по скорости.

В моем приложении, чтобы выполнить геокодирование, я просто запрашиваю один адрес, и когда я получу ответ, я попрошу следующий, пока я не получу lat / long для всех моих адресов.

Я помещу этот код в выделенный поток, чтобы не блокировать пользователя. Кажется, это работает, но это хорошая стратегия? Как я могу быть уверен, что Apple не будет вносить в черный список мое приложение или возвращать ошибку для моих запросов.

geoCodingFor(myAddress, index: 0) private func geoCodingFor(contacts:[String], index:Int) { if index < contacts.count { let address = contacts[index] CLGeocoder().geocodeAddressString(address) { placemarks, error in if let theError = error { print("\(#function) geocode has failed for address \(address) with error \(theError .localizedDescription)") } else { if let thePlacemark = placemarks { if thePlacemark.count > 0 { print("=> Found placemark for address \(address)") } else { print("No placemark for address \(address)") } } else { print("\(#function) Warning geocode has no results for address \(address)") } } if index < contacts.count { self.geoCodingFor(contacts, index: index + 1) } } } else { print("\(#function) ================> Geocoding is completed") } } 

Short: Возможно, просто попробуйте sleep(2) перед каждым запросом на геокодирование.

Long: Хотя нельзя быть уверенным, что Apple будет «черным списком» своего приложения. Я не уверен, что приложение «черного списка» для геокодирования много существует.

Я сам попробовал аналогичную стратегию для вас. Используется только внешняя queue переменных и выполняет queue.popLast() . Это дало мне 100 результатов, а затем я начал получать ошибку для остальных адресов.

Я добавил sleep(2) перед каждым запросом на геокодирование, и мне удалось извлечь более 4000 геокодировок без блокировки.

Недостаток – это занимает больше времени. В зависимости от того, сколько адресов вы планируете геокодировать, это может быть полезно.

Также обратите внимание, что я никогда не пробовал sleep(1) , что также может работать в некоторой степени.

В соответствии с максимальными ставками документации Apple не указано, и они рекомендуют, чтобы

вы не должны отправлять более одного запроса на геокодирование в минуту

Надеюсь, это поможет.

Приветствия.

Interesting Posts
Давайте будем гением компьютера.