0

1 つの郵便番号 (ユーザーが提供する) と他の多数の郵便番号 (現在、約 200 の郵便番号があります) の間の距離を比較するために、(読み込み時間に関して) 最も効率的なものを見つけようとしています。 、ただし、時間の経過とともに増加する可能性があります)。ボールパークだけで正確なものは必要ありません。

米国全体の郵便番号 csv ファイルをダウンロードし、2 つの郵便番号間の距離を生成する関数を取得しました (ラジアン単位だと思います)。距離を表示する必要はありません。 200 の郵便番号。最も近いものが最初の結果になります。

csv ファイルを mysql テーブルにアップロードしました。200 の郵便番号すべてを循環して、距離を含むそれぞれのフィールドを更新できると考えていました。次に、ORDER BY を使用して、最も近いものから最も遠いものへと並べ替えます。

これを行うためのより効率的な方法を知っている人はいますか? この方法では、検索クエリが実行されるたびに、郵便番号のデータベース全体を更新する必要があります。郵便番号が 200 しかないので、今は大したことではありませんが、データベースが構築されるにつれて読み込み時間が遅くなると思います。アドバイスをよろしくお願いします。

4

1 に答える 1

2

Javascript の場合:

var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;

ここで、d = 2 点間の距離

これがハバーサインの公式です。

于 2010-02-28T02:11:54.367 に答える