大きなサイズの画像はOufOfMemoryExceptionにつながります
-
28-10-2019 - |
質問
OpenMapを使用しており、非常に大きなサイズの画像を読み込む必要があります。
これらの画像を大きなラスターとして読み込もうとしましたが、OufOfMemoryExceptionで失敗しました。デバッグモードでは、レイヤーコンストラクターが画像のサイズが大きすぎることを通知します。
OpenMapメーリングリストで、GeoTiffファイルをロードして表示できるMyJAIPluginを見つけました。
OpenMapで300mbのGeoTiffを表示するにはどうすればよいですか?
解決
少なくとも690mbのファイルサイズのHDマップをロードすることで、ほぼ同じ状況になりました。
私もメーリングリストのJAIPlugInを使用し、内部的にはOMScalingRasterウィッチを使用してBufferedImageで動作します。これらは画像サイズを制限し、デバッグメッセージを表示します。
OMScalingRasterを変更して解決しました。大きな画像を処理するためにBufferedImageをTiledImageに変更し、今後のエラーを修正しました。ここでは、scaleTo(Projection thisProj)メソッドを変更して、JAIでスケーリングすることが重要です。
これでファイルをロードでき、マップ上にレンダリングされます。ただし、ズームアウトしすぎると、OutOfMemoryExceptionがスローされます。これは、私の変更では、表示される画像の部分のサブイメージを作成し、それをBufferedImageとしてOMRasterに渡すためです。
これがmodです。 scaleToメソッドの最後: ジェネラコディセタグプレ
BufferedImageをTiledImageに置き換えることによるその他のエラーについては、同等のTiledImageメソッドを使用してください。ただし、メモリを節約するには、sharedDataBufferフラグ= trueのTiledImageコンストラクタを使用する必要があります。
Exsampleの場合このmod。 1:50000のスケーリングでマップ(圧縮された690mb)を処理でき、レイヤーがメモリ不足と表示する前に1:600000にズームアウトできます。