シェープ・ファイルのロード・オンデマンド

Maps パッケージでは、シェープファイルでロード・オンデマンドを実行するためのクラスが提供されています。ロード・オンデマンドは、特定の空間インデックス・ファイルを使用して実行します。通常、.idx 拡張子を持つこれらのファイルには、タイルに属すタイルやオブジェクトの ID 間の関係を格納します。用意されたクラスとツールの例を使用して、これらの空間インデックス・ファイルを生成することができます。また、シェープ・ファイルを使用してロード・オンデマンド機構を実装する際に必要なコーディングを最小限に抑えるための、汎用的なタイル・ローダーも備わっています。
ロード・オンデマンド機構では、シェープ・ファイル・リーダーと dbf リーダーだけでなく、 IlvShapeFileIndex クラスと IlvShapeSpatialIndex クラスも関係します。また、指定されたシェープ・ファイルの空間インデックスを生成するために、ユーティリティー・クラスも提供されています。 IlvShapeFileTiler クラス。
以下の図は、オブジェクトをタイルごとに格納、取得するための機構を示しています。
mapsprg_intro6.gif
空間インデックス・ファイルには、各タイルのオブジェクト ID が含まれます。オブジェクト ID は、IndexFile 内の順序を示すものです。ジオメトリーは、IndexFile を使用してシェープ・ファイルから取得します。以下の例では、タイル [2, 1] (0 で始まるタイル・インデックス) には、ジオメトリー g2、g5、g9 を参照する ID 2、5 および 9 が含まれます。
シェープファイルでロード・オンデマンドを実行する際に使用するクラスは、以下のとおりです。

IlvShapeFileIndex クラス

このクラスを使用すると、シェープ・ファイルのジオメトリーに直接アクセスできます。空間インデックスとシェープ・ファイルは、同一テーマに対応する必要があります。
// Open the index file.
IlvShapeFileIndex index = new IlvShapeFileIndex("example.shx");
// Open the corresponding Shapefile.
IlvSHPReader shape = new IlvSHPReader("example.shp");
// Retrieve the feature for each index.
int count = index.getRecordCount();
for(int i = 0; i < count; i++)
    IlvMapFeature f = shape.getFeatureAt(i);

IlvShapeSpatialIndex クラス

このクラスはタイル情報、つまり、タイルのサイズと数、各タイルに属するオブジェクトの ID を格納します。 getIdArray メソッドを使用して、行と列で指定したタイルからオブジェクトを取得します。
// Open the spatial index file.
IlvShapeSpatialIndex spatialIndex =
    new IlvShapeSpatialIndex("example.shx");
// Loop on all columns and rows.
for(int c = 0; c < spatialindex.getColumnCount(); c++) {
    for(int r = 0; r < spatialindex.getRowCount(); r++) {
        // Retrieve the IDs of objects belonging to the tile at row ‘r’ and 
        // column ‘c’.
        int[] ids = spatialindex.getIdArray(c, r);
        // Loop on these IDs and get the corresponding map feature.
        for(int i =0; i < ids.length; i++) {
            IlvMapFeature f = shape.getFeatureAt(i);
        }
    }
}

IlvShapeFileTiler クラス

このクラスを使用して特定のシェープ・ファイルのタイリング情報を生成します。このクラスを使用するには、タイルのシェープ・ファイル、書き込む SpatialIndexFile、およびタイル・サイズまたは行と列の数を指定する必要があります。
IlvShapeFileTiler.CreateShapeSpatialIndex("example.shp", 
                                          "example.idx", 
                                                     5., 10.);              
上記のコード引用では、SpatialIndexFile という名前の example.idx が、幅 5 高さ 10 のタイル・サイズで作成されます。
IlvShapeFileTiler.CreateShapeSpatialIndex("example.shp", 
                                          "example.idx", 
                                          20, 30);
上記のコード引用では、600 タイル、20 列、30 行の SpatialIndexFile が作成されます。