XMLファイルから複数の住所をジオコーディングして、地図上にマーカーをプロットするためのlat/lngを取得しています。約15のアドレスで正常に動作しますが、今日確認したところ、88のアドレスがあり、ページの読み込みに時間がかかります。何が起こっているのかというと、ユーザーが地図ページへのリンクをクリックすると、すべての住所がジオコーディングされるまでブラウザが回転し、ページが読み込まれます。System.Threading.Thread.Sleep(150);を使用する必要があります。クエリ制限エラーを回避するために、Googleサービスを呼び出す前に。これでページをロードしてからアドレスをロードするためにできることはありますか?
1 に答える
お気づきのとおり、Googleのジオコーディングサービスは、大量のリクエストには対応していません。実際、一括ダウンロードやバッチリクエストの処理にサービスを使用することは、利用規約に違反します。
探す必要があるのは、このような下限がなく、APIにバッチリクエストを送信できるサービスです。開示の目的で、私はSmartyStreetsで働いており、 LiveAddressと呼ばれるそのようなAPIを提供しています。
ジオコーディングとプロットの住所と同じ数のリクエストを送信しているようです。15〜100のリクエストには、ネットワーク遅延を含めて1〜10秒または15秒かかります。私の仕事の中であなたの状況を何度も見てきましたが、それは正当な質問です。
サーバーにページをクライアントにプッシュダウンさせてから、Javascriptに座標をロードさせ、ポイントをプロットさせることをお勧めします。(C.Evenhuisは彼のコメントでこれを提案しました。)これは以前にページをロードしますが、それでもある種の「ロード中」のアニメーションを回転させる必要があり、それでもユーザーを待たせます。Googleのアップグレードされたライセンスがないと、制限は残ります。
これを克服するために、いくつかの重要な機能を備えたAPIを探すことができます。
- 地理的に分散。これにより、ネットワークの遅延が減少し、パフォーマンスが向上します。
- バッチリクエストまたはジオコーディングをまとめて実行できる利用規約
- リクエストごとに複数のアドレスをサポートします。つまり、最大100または200のアドレスの場合でも、ページの読み込みごとに1つまたは2つのリクエストを送信するだけで済みます。
- できれば、アドレスをプロットする前に、アドレスを確認する方法が存在することもできます。Googleは住所を概算し、検証しません。
- スクリプトを最適化するための一時的な時間以上の値をキャッシュ/保存する権限。GoogleのTOSでは、実行時のパフォーマンスを最適化するために一時的にのみ結果を保存することはできません。
何を探すかの例としてLiveAddressを使用し、それがニーズを満たしているかどうかを確認できます。1回のリクエストで最大100個のアドレスをサポートするため、待機時間は数秒から数ミリ秒になります。ダウンロードした結果は基本的に無期限に保存でき、実際に存在する住所の座標のみを返すか、正しくない住所を修正します。ご不明な点がございましたら、お気軽にお問い合わせください。
考えとして、クライアント側でアドレスをジオコーディングしたくない場合でも、C#コードでこれを実行し、すべてのアドレスを1つのリクエストにバンドルできます。