2

プロジェクトの背景: gdal2tile.pyタイルを使用できるJava用のマップタイルオーバーレイクラスを作成しています。基本的に、「ズームレベル/X座標/Y座標」のようなファイル構造の何千ものjpgファイルになります。座標はintですが、必ずしも0または1で始まるとは限りません。特定の範囲内で、レンダリングする必要があるものを見つけます。

私の問題: ファイル構造自体を使用して反復を試みましたが、遅くなります(驚くことではありません)。ファイル構造と.contains()の文字列のArrayListを使用して反復を試みましたが、さらに遅いようです(それほど驚くことではありません)。最適には、次のようなものを呼び出すことができるように、複数の次元の範囲を選択できるデータ構造を使用したいと思います。

Tiles.getWhere(ズームレベル、最小X、最大X、最小Y、最大Y);

ある種のコレクションまたはTreeMapが正しい選択であると思いますが、Javaの経験が十分ではなく、さまざまなアプローチをベンチマークする必要はありません。

SQLiteを使ってそれを行うこともできますが、それはやり過ぎのようです。

私の質問: 多次元の制約が与えられた場合にデータセットの存在をチェックする最も効率的な方法は何ですか?

4

3 に答える 3

0

複数のキーを持つマップを探している可能性があります。

Commons-collectionsは、複数のルックアップキーを備えたマップを提供します。

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/MultiKeyMap.html

マップは、O(1)の挿入とO(1)の選択のタイミングを保証します。

于 2011-10-19T11:38:30.200 に答える
0

インターバルツリーのようなものを探しているように思えます。

http://en.wikipedia.org/wiki/Interval_tree

私は過去にこれらの 1 つを実装しましたが、1 つの次元でのみ実装しました。ウィキペディアのリファレンスでは、より多くの次元への拡張について言及しています。

ポール

于 2011-10-19T10:40:29.300 に答える
0

あなたの問題を考えると、次に検索を向けることができる 3 つの方向性を見つけることができます(これは手動のガイドではなく、直面した行き詰まりの状況に対するすぐに使える頭脳オープナーです)

1) Java 組み込み構造の使用。はい、確かに、リストは検索方法の最悪のケースです。AMapは、その名前が示すように、マップにははるかに便利です。名前だけでなく、 へのインデックス付けは、 にMap比べて大幅に時間がかかりませんList。マップを立方体として想像することができます。マップにListインデックスを付けて検索するときに、その中のドットの約半分を処理する必要があります。程度の差があります。したがって、ここでの私の答えMapは、正しい方向へのキーワードです(私の答えを読んだ後、このようにしたいと仮定します)

2)マップ サーバー ソリューションの使用。これはおそらくあなたのアプローチからはかけ離れていますが、フレームワーク全体があなたのタイプの質問を解決するために作られています. 例はGeoServerです。問題全体に対する既製のソリューションがあります。これは、ソースからユーザーにマップを表示するという、大きな大きな問題に対する安定したソリューションです。

3)使用していた GDAL フレームワークに固執すると、 gdal_proximity.pyのようなわずかに異なる py ファイルを選択できます。-あなたの手の中に検索の可能性があります! この特定のものは、中心点と距離で検索しますが、必要なことを行います =)

出発点があります。これは何かの役に立ちますか?

于 2011-10-17T17:58:34.190 に答える