シェープ・ファイル形式を書き込むためのクラス

ilog.views.maps.format.shapefile パッケージには、シェープ・ファイルを書き込むための次のクラスが含まれています。
クラス IlvSHPWriter クラスを使用してシェープ・ファイル (.shp および .shx ファイル) のジオメトリーとインデックス部分を生成し、 IlvDBFWriter を使用して属性ファイル (.dbf 拡張子) を記述します。
機能イテレーターの場合のように、シェープ・ファイルに地図機能を書き込むには、メソッド writeFeature および writeAttributes を使用して繰り返し地図機能を書き込んでから、ライターの close メソッドを呼び出してデータをフラッシュし、ヘッダーを書き込みます。

IlvSHPWriter クラス

IlvSHPWriter クラスでは、シェープ・ファイル・レコードへのダイレクト・アクセスを実現するシェープ・ファイル・インデックスを作成して、シェープ・ファイルへのジオメトリーの書き込みを管理します。
以下の例は、このクラスを使用してインデックス・ファイルの作成と同時に、ファイル foo.shp に機能イテレーターの内容を書き込む方法を示しています。
try {
   IlvSHPWriter shpwriter = new IlvSHPWriter("foo.shp",
                                            "foo.shx");
  // Loop on features.
  IlvMapFeature feature = iterator.getNextFeature();
  while (feature != null) {
    shpwriter.writeFeature(feature);
    feature = iterator.getNextFeature();
  }
  shpwriter.close();
} catch (IOException e) {
  // Error processing.
  e.printStackTrace();
}
メモ
シェープ・ファイル形式は、データをすべて書き込んだときに完成するヘッダーを定義します。このため、ヘッダーを更新するために、データをすべて書き込んだときにシェープ・ファイル・ライターの close() メソッドの呼び出しは必須になっています。

IlvDBFWriter クラスと IlvDBFAttributeInfo クラス

IlvDBFWriter および IlvDBFAttributeInfo クラスは、DBase III+ ファイル (.dbf ファイル) の書き込みを管理します。これらのファイルには、シェープ・ファイルに含まれるジオメトリーの属性に対応する記録が含まれます。
.dbf ファイルのレコードは固定サイズのフィールドでなければならないため、フィールドの全データの格納に十分なフィールド・サイズで、データを消費しすぎないようなフィールド・サイズを選択することが重要です。
クラス IlvDBFAttributeInfo は、レコードのフィールドを定義するための IlvAttributeInfoProperty を補うためのものです。
以下の例は、イテレーターの内容を一連の .shp.shx、および .dbf ファイルに書く方法を示しています。
try {
  // Create the SHP writer.
  IlvSHPWriter shpwriter = new IlvSHPWriter("foo.shp", "foo.shx");

  // Read the first feature.
  IlvMapFeature feature = iterator.getNextFeature();

  // Create the DBF Writer.
  IlvDBFAttributeInfo info =
      new IlvDBFAttributeInfo(feature.getAttributeInfo());

  IlvDBFWriter dbfwriter = new IlvDBFWriter(info,
                                            "foo.dbf");

  // Loop on features.
  while (feature != null) {
    shpwriter.writeFeature(feature);
    dbfwriter.writeAttributes(feature.getAttributes());
    feature = iterator.getNextFeature();
  }
  shpwriter.close();
  dbfwriter.close();
} catch (IOException e) {
  // Error processing.
  e.printStackTrace();
}
ここでも、ヘッダーを正しく書き込むためにライターを終了する必要があります。