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(); }
ここでも、ヘッダーを正しく書き込むためにライターを終了する必要があります。