カスタム・データ・ソース用のタイル・ローダーの記述

新しいデータ・ソースのロード・オンデマンドを実装する場合に必要となるのは、 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();
  }
この例のソース・コード一式は、以下のファイルにあります。