緯度/経度を取得するには、多くのアドレスをCLPlacemarkに変換する必要があるアプリがあります。 アップルのドキュメントでは、多くのジオコードリクエストを実行すべきではないと説明されています。ジオコーディングリクエストはレート制限があります。多くのジオコード要求を実行する戦略
私のアプリケーションでは、ジオコーディングを実行するためにただ1つのアドレスを要求します。答えを受け取ったら、私はすべてのアドレスの緯度/経度を受け取るまで次のものを要求します。
このコードを専用スレッドに入れて、ユーザーをブロックしません。それは動作するようですが、それは良い戦略ですか? 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")
}
}
あなたの答えをありがとう!あなたの経験に基づいて私が試みるのは私の要求を(私が現在行っているように)直列化することですが、エラーが発生した場合は、失敗した要求を要求するためにsleep()を追加します。私は各要求の間に睡眠を追加することはできません。なぜなら、ユーザーには時間がかかりすぎるからです。別のオプションとして、複数のジオコーディングプロバイダを並行して使用することができます。必要なジオコーディング要求の最大数は500未満です。 – sebastien