10

緯度/経度で表される最も近い場所を計算するために、マップを約100x100メートルのグリッドである小さなグリッドに分割することを検討していました。基本的に、各ポイントはグリッドに割り当てられます。

代わりにMySQLなどで空間インデックスを使用できることは理解していますが、空間オブジェクトのインデックス作成が困難なCassandraのような非リレーショナルデータベースを使用することを計画しているため、ある種のグリッド近似手法が適している可能性があります。

そのようなグリッドシステムを作成し、それに2D空間位置をマッピングする最良の方法は何でしょうか?

編集1:グリッドが完全に均一でなくても大丈夫かもしれません。

4

4 に答える 4

7

2次元の空間座標から空間インデックス/ジオハッシュへのマッ​​ピングは興味深い問題です。四分木、ジオハッシュ、ヒルベルト曲線に関するこの記事をご覧ください。ヒルベルト曲線は、局所性を提供する空間充填曲線です。あなたの目的のために、それは一次元空間インデックスの近くのアイテムが二次元空間の近くにあることを意味します。

(他のレスポンダーによって説明されているように)目標は、サーバーに大量の不要なデータを要求することなく、問題のスペースをカバーするために必要なクエリの数を最小限に抑えることです。2次元空間から1次元インデックスへのマッピングをどのように行うかは、その目標に影響します。

于 2009-12-01T20:42:28.340 に答える
5

正確なアプリケーション要件を知らなくても、ジオハッシュは適切な手法である可能性があります:http: //en.wikipedia.org/wiki/Geohash

「これは、空間をグリッド形状のバケットに分割する階層的な空間データ構造です。ジオハッシュは、任意精度や、コードの末尾から文字を徐々に削除してサイズを縮小する(そして徐々に精度を下げる)などのプロパティを提供します。」

于 2009-12-01T09:00:36.827 に答える
4

長方形のグリッドは妥当な見積もりですが、極に近すぎない比較的小さな領域でのみ可能です。フルグローブソリューションには、別のアプローチが必要です。

于 2009-12-01T08:47:51.423 に答える
2

地球儀を均一にマッピングする長方形のグリッドを作成することはできません。グリッドを均一にする必要がある場合は、代わりに三角形を使用する必要があります。しかし、一般的に、これで問題が解決するかどうかは疑問です。必要なのは、ある種の2D八分木(これはGoogle検索リンクです。これがどのように機能するかを簡単に知るために画像を確認してください):座標を階層(たとえば、原点の北/南/東/西)に分割する必要があります最初のレベル、次に90度の間など)。

次に、既存の座標を含む最小の長方形をすばやく生成するいくつかの選択を実行できます。これで、長方形のサイズを確認できます。100m未満の場合は、解決策が見つかります。それ以外の場合は、チェックするポジションがいくつかあります(通常は1つ)。

実装のための「octreesqldatabase」のためのグーグル。

于 2009-12-01T08:44:28.653 に答える