新しいデータ・ソースのロード・オンデマンドを実装する場合に必要となるのは、 IlvTileLoader または IlvMapTileLoader インターフェースを実装する特定のタイル・ローダーを記述することだけです。ただし、JViews Maps に付属する定義済みの地図形式では、ロード・オンデマンドは、タイル・ローダー (プライベート・クラスとして) と、タイリング・パラメーターの両方を関連する適切な形式に定義する IlvTiledLayer のサブクラスとして実装されていることに注意してください。
IlvMapTileLoader
クラスと定義済み形式については、「リーダーとライター」で説明します。タイル・ローダーの効率を最大にするためには、以下の要件を満たす必要があります。
- タイルにロードするオブジェクトを決定できること。これらのオブジェクトは、既知の名前を持つファイルから読み込み可能であるもの、または地図データベースへの照会の結果になります。
- データへのダイレクト・ランダム・アクセスが可能なこと。
- 読み込むデータ・サイズは、タイル・サイズに比例し、高速ロードが可能なこと。例えば、100x100 のサイズのラスター・イメージは、6000x6000 のサイズのイメージよりも速くロードされます。
タイル・ローダーの以下の例では、2 つのグラフィック・オブジェクト、矩形およびラベルのローディングをシミュレートします。
その
load()
メソッドは、タイルをパラメーターとしてロードします。このメソッドでは、タイルに表示するグラフィック・オブジェクトを生成し、tile.addObject()
メソッドを呼び出し、それらのオブジェクトをタイル・レイヤーに追加します。ローディングが完了すると、tile.loadComplete
メソッドを呼び出し、タイルのデータが使用可能であることをリスナーに通知します。public class LodLoader implements IlvTileLoader { [...] public void load(IlvTile tile) throws Exception { IlvRect bbox = new IlvRect(); tile.boundingBox(bbox); // Add a rectangle inside the tile bounding box tile.addObject(new IlvRectangle(bbox),null); // Add text String text = this.layerName + " (" + tile.getColumn() + "," + tile.getRow() + ")"; IlvPoint textCenter = new IlvPoint(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2); tile.addObject(new IlvLabel(textCenter,text),null); tile.loadComplete(); } [...]
release()
メソッドは、タイル・キャッシュがタイルを解放すると呼び出されます。tile.deleteAll
メソッドでは、タイルを消去します。/** * Releases the objects on this tile. */ public void release(IlvTile tile) { tile.deleteAll(); }
この例のソース・コード一式は、以下のファイルにあります。