1

iOS では、一度に約 50 個のジオコード リクエストに制限されていると読みました。大きなセット、おそらく 200 のセットがある場合はどうなりますか? 一度に 50 を超えるセットをジオコーディングする方法はありますか? たとえば、セット間の遅延を使用して、各セットを 50 に制限します。セット間のジオコーディングを遅延させる理想的な方法は何でしょうか?

次の質問に対する NSProgrammer の回答を見てきました。

iPhone iOS5 CLGeocoder 大規模な (200) の住所セットをジオコーディングする方法は?

彼が言及した遅延の種類について何か提案はありますか? その遅延はハンドラー内で別のスレッドで実行されますか?

for(int i = 0; i < [myArray count]; i++){

[call geoCoderMethod];
}


-geoCoderMethod{
    [geocoder geocodeAddressString:addressString completionHandler:^(NSArray *placemarks, NSError *error) {

    getCo-ordinates;
    add annotation to mapview;
}

配列をそれぞれ 25 項目のチャンクに分割し、 を呼び出して、メソッドgeoCoderMethodを使用して遅延を誘発しようとしましたperformSelector。しかし、performSelectorメソッドとgeoCoderは別のスレッドで実行されているようで、メソッド呼び出しの間に遅延を引き起こすことはできません。

4

2 に答える 2

0

住所のコレクションがあり、それらを座標に変換する必要がありました。私がしたことは、コレクションを最大 40 の連絡先のチャンクに分割することでした (50 までは可能ですが、1 分でそれを超えることはできません)。そのため、連絡先が 40 を超えるグループでは、すべての住所が処理され、マップビューが読み込まれる前に座標に変換されるように、その間に遅延を設ける必要がありました。

ユーザーの要件に基づいてマップビューをロードする必要があります。私の場合、グループ内の連絡先リストや時間要因に関係なく、マップビューを再度ロードして取得することができました。ユーザーがマップビューをロードして 1 分以内に再ロードする場合、そのためのロジックを開発する必要がありました。そのために、ユーザーが同じグループのアドレスを 1 分以内にリロードすることを決定した場合、マップビューの状態を保存することにしました。

しかし、ユーザーが連絡先の別のグループを読み込むことにした場合、読み込む連絡先のグループに基づいてロジックを再考する必要がありました。そのため、グループの連絡先の数が 40 を超えているかどうかに関係なく、どのグループ (以前のグループまたは新しいグループ) をロードするかを追跡する必要がありました。

私が気をつけなければならなかったもう一つの重要な要素は時間でした。そのために、前回動作NSDateした「時間」を常に追跡する静的変数があり、現在の時間(使用しようとしている時間)に1分の差がない場合は、マップの読み込みを遅らせます。CLGeocoderCLGeocoder

これは、 からの座標を使用して mapView を実装するために行ったことCLGeocoderです。ロジックを大幅に最適化でき、出力が高速になると確信しています。誰かがより良い実装を考え出していただければ幸いです。

于 2013-03-27T12:54:12.490 に答える
0

ここでの完全な解決策は、ロジックによって異なります。変更可能な配列を使用して 200 個のアドレスすべてを保存し、「for ループ」を実行して送信リクエストを 50 未満に制限できます。たとえば、20 または 30 はアドレス配列の配列数に依存します。そして、制限で割って、200 のアドレスがある場合にこの「for ループ」がループする回数を決定します。次に、20 で割ると、「for ループ」が合計 10 回実行され、実行ごとにジオコーディング用に 20 個のアドレスが送信されます。 . 50に届かず楽にリトリーブできるように。

于 2013-03-21T13:23:14.940 に答える