1

一度に多数の住所 (~1500) をジオコーディングする必要があるアプリケーションがあります。Javascript Google Maps API Library v3 を使用して緯度と経度を取得しています。情報は後で使用するために MySQL データベースに保存されています。

明らかにこれには時間がかかります..私のコードはアドレスを配列に入れ、その配列で再帰関数を呼び出します。関数は各住所を取得し、ジオコーディングを試みます。ジオコードが成功した場合、関数は次の住所に進みます。ジオコードが を返した場合ZERO_RESULTS、関数は次の住所に進みます。ジオコードが を返した場合OVER_QUERY_LIMIT、関数は を使用setTimeoutして一定時間一時停止し ( に保存されてvar timeoutから、再試行します。

今、私は のさまざまな値を試してみましたtimeoutが、どれだけうまく機能するかが異なります..おそらく2000、または 2 秒が最適でした。これにより、約 365 の住所をジオコーディングできました。ただし、プログラムが約 250 のアドレスをコーディングすると、速度が完全に低下し、10 秒ごとに 1 つのアドレスをコーディングするようになります。

だから..このプロセスをスピードアップする方法を知っている人はいますか? 現在、同じアドレスで関数が呼び出された回数をチェックするカウンターもあります (OVER_QUERY_LIMITアドレスがコード化される前に受信したエラーの数を追跡するため)。普通なら2秒遅らせて、同じアドレスがOVER_QUERY_LIMIT10回来たら30秒くらい遅らせた方がいいのでしょうか?

どんな助けでも大歓迎です!乾杯

4

1 に答える 1

0

より高い制限を支払うか、別のジオコーディング プロバイダーを使用することができます。

私はそのようなプロバイダの 1 つである SmartyStreets で働いており、リクエストの制限はありません。LiveAddressはクラウドでスケールアップします。1,500 の住所は、私たちがジオコーディングに慣れている数千万、数億の住所に比べれば大したことではありません。もちろん、独自の調査を行いますが、興味がある場合は、次のようになります。

var addr = {
    street: "7584 E Big Canyon Dr.",
    zipcode: "92808"
};

// If you don't have the address in component form, you could just pass
// in a string containing the entire address instead.

LiveAddress.geocode(addr, function(geo) {
    alert("The address is at: " + geo.coords);
});
于 2013-02-16T01:55:28.233 に答える