Maps パッケージでは、シェープファイルでロード・オンデマンドを実行するためのクラスが提供されています。ロード・オンデマンドは、特定の空間インデックス・ファイルを使用して実行します。通常、.
idx
拡張子を持つこれらのファイルには、タイルに属すタイルやオブジェクトの ID 間の関係を格納します。用意されたクラスとツールの例を使用して、これらの空間インデックス・ファイルを生成することができます。また、シェープ・ファイルを使用してロード・オンデマンド機構を実装する際に必要なコーディングを最小限に抑えるための、汎用的なタイル・ローダーも備わっています。ロード・オンデマンド機構では、シェープ・ファイル・リーダーと
dbf
リーダーだけでなく、 IlvShapeFileIndex クラスと IlvShapeSpatialIndex クラスも関係します。また、指定されたシェープ・ファイルの空間インデックスを生成するために、ユーティリティー・クラスも提供されています。 IlvShapeFileTiler クラス。以下の図は、オブジェクトをタイルごとに格納、取得するための機構を示しています。
![mapsprg_intro6.gif](../usrprgmaps/_media/mapsprg_intro6_default.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
が作成されます。