JViews Maps 8.1 では、専用の
.ivl
ファイル形式で地図を保存することができます。このファイル形式は、基本的には、正規の Rogue Wave® JViews 形式を多少修正して、大量のラスター・データを含む地図の読み込みパフォーマンスを向上させたものです。地図を保存するには、以下の手順に従います。
-
ファイル名から IlvMapOutputStream オブジェクトを作成します。このクラスは IlvOutputStream を拡張し (『基礎編JViews Framework』の「入出力操作」を参照)、 IlvManager. よりコンパクトなバイナリー形式、またはより読みやすい ASCII 形式でファイルを書くという選択もできます。
String mapFilename = "myMap.ivl"; boolean binary = false; IlvMapOutputStream mapOutput = new IlvMapOutputStream(mapFilename, binary);
上記のIlvMapOutputStream
コンストラクターを使用するとき、イメージ・ファイルの名前 (「.img ファイル」を参照) は、.img
拡張子を追加するか、またはivl
拡張子を.img
で置き換える方法で、指定した地図ファイル名から推論されることに注意してください。また、IlvMapOutputStream
を異なるコンストラクターで作成して、java.io.OutputStream
を地図コンテンツの保存先に指定し、異なるファイル名を.img
ファイルに指定することもできます。この場合、地図を読み取るときに、適切な一致する IlvMapInputStream のコンストラクターを使用する必要があります。詳細については、下の地図の再読み取り手順を参照してください。 -
また次のようなオプションもあります。地図テーマのみを保存できます。テーマ・ファイルのみを再ロードすると、モデルのすべての IlvMapDataSource インスタンスが再スタートされ、オリジナル・ファイルからデータを読み込んで地図を再構築します。これは、
.ivl
ファイルの再ロード中に、オリジナル・データ・ソース (ESRI シェープ・ファイル、DTED® など) が利用できる場合に便利です (同じマシンで作業している場合や、データ形式がネットワーク上のリソースに保存されているときに同じネットワーク上で作業している場合など)。作成されるファイルは小さく、通常ほんの数十 KB です。mapOutput.setWritingObjects(false);
逆に、地図をオリジナル・データ・ソースなしで配布する予定の場合、またはより高い再ロード・パフォーマンスを希望する場合は、すべてのデータをファイルに保存するようにします。mapOutput.setWritingObjects(true);
-
マネージャーを
IlvMapOutputStream
に記述し、残っているリソースをクリーンアップします。try { mapOutput.write(manager); } catch (IOException ex) { // handle I/O exception here...… }
地図を再ロードするには、以下の手順に従います。
-
まず、現在のマネージャーをクリアするようにします。「地図データのクリア」を参照してください。
-
IlvMapInputStream を作成し、これを使用して地図ファイルを読み込みます。これにより、読み込まれたデータと該当する読み込まれた地図モデル (データ・ソース、地図レイヤーなど) との再接続が管理されます。
String mapFilename = "myMap.ivl"; IlvMapInputStream mapInputStream = new IlvMapInputStream (mapFilename); try { mapInputStream.read(manager); } catch (Exception ex) { // handle reading exceptions here }
上記のIlvMapInputStream
コンストラクターを使用するとき、.ivl
ファイルに付随する.img
ファイル (IlvMapInputStream
に渡される) は、.ivl
ファイルと同じディレクトリーになければなりません。異なるディレクトリーにあると、ストリームがこのファイルを見つけられず、地図上の画像が再現されません。地図を保存するときに、.img
ファイルに異なる名前を指定する場合 (「地図の保存と再ロード」を参照) は、以下のように適切なコンストラクターを使用してIlvMapInputStream
にもファイル名を指定する必要があります。String ivlFilename = "myMap.ivl"; String imgFilename = "myImgFilename.img"; //Create the input stream for the .ivl file. FileInputStream fis = new FileInputStream(ivlFilename); //Create the IlvMapInputstream and specify the image file name. IlvMapInputStream mapInputStream = new IlvMapInputStream(fis, imgFilename); //Read the map as described previously. try { mapInputStream.read(manager); } catch (Exception ex) { // Handle reading exceptions here. }