1

このhttp://www.maxmind.com/app/geolitecityのような、ZIP または (都市、州、国) パラメータに基づいて経度と緯度を超高速で取得するために最適化されたデータベース構造を知っている人はいますか?

Maxmind のデータベースは、IP 検索以外の検索をサポートしていません。少なくとも、知識を掘り下げることはできません。したがって、できればJavaでそれを行う方法を知っていれば、私はすべて耳にします。

これは、SQL タイプのデータベースまたは CSV ファイルまたは Google API ソリューションであってはなりません。あなたはただゆっくりするだけです。特に、距離でソートされた検索結果を提供したい場合。

有料ソリューションもオプションです。データ構造は自由である必要はありません。

4

2 に答える 2

1

これは、2次元インデックスをサポートするデータベースエンジンで非常に迅速に実行できます...そしてmysqlは私が知っているように無制限の次元をサポートします...それは簡単です..結果セットを妥当なものに制限するために2次元インデックスを使用しますサイズを非常に速く...次に、必要に応じて高精度の計算アルゴリズムを使用して結果セットを調べます。難しいことではありません。ただし、経度180 / -180の線と交差して2dになる場合は、2つのリストを一緒に作成する必要があります。インデックスは単純です....インデックス(緯度、経度)...そのインデックスは緯度または緯度、経度のペアでのみ機能します...経度だけでは機能しません...経度インデックスに追加のインデックスが必要な場合(経度)....大まかな見積もりの​​正方形を選択し、気になる場合は角を丸めます。..。

最初に郵便番号または都市がある場合...郵便番号は単なる1次元インデックスです...問題なく高速に実行できます..インデックスインデックス(zip)を使用するだけです...ハードドライブが遅すぎる場合は、ソリッドステートドライブを取得してシーク時間をなくします。または、巨大なRAMを使用してテーブル全体をキャッシュします。これは、どちらの方法でも難しい問題ではありません。

それが十分に速くない場合は、ネットワークオーバーヘッドがあるため、誰かのサービスを使用しても役に立ちません...データをram / ssdに直接保持し、独自の2-d/1-dインデックスシステムを構築する必要があります。それが必要です(難しくはありません)... sqlエンジンには多くのオーバーヘッドがあるため、そのルートはおそらくsqlを10倍ほど上回る可能性があります...誰かが自分のマシンで実行されるサービスを提供する可能性がありますが、現実的には、サービスにリクエストを送信するために多数のフープディループを通過する必要があるため、SQLに勝るものはありません。ソリッドステートドライブを使用するSQLおよび2-Dインデックスは高速で処理されます。郵便局でない限り、データを自分で処理する必要はありません。データを提供する1台のマシンで1秒あたり10,000通のメールを並べ替えます。次にあなた'

于 2012-01-13T04:14:31.710 に答える
1

これを行うための「速い」方法などあるとは思いません。私はカナダの郵便番号用のジオコーディング API を作成しました。検索方法は、郵便番号の 2 つのインデックス (緯度順と経度順) を使用することです。いくつかの球面ジオメトリを実行し、指定された半径内のすべてに適合する境界「ボックス」を開発できますが、それでも戻って、Vincenty または Haversine、または原点間の距離に選択したアルゴリズムを使用して、ポイント ツー ポイントの距離測定を行う必要があります。とあなたが見つけた各郵便番号。

世界規模のデータベースでは、子午線と赤道をまたぐことができるため、計算が複雑になります。

ほとんどの距離計算ヒューリスティックが必要とするため、ラジアンで作業できる何らかのエンコード スキームが必要になります。

于 2011-04-03T17:50:25.923 に答える