“TIFF file is missing a required tag StripOffsets” - ошибка при работе с классом GeotiffReader

157
13 декабря 2018, 01:40

Всем привет! Возникла такая проблема - при работе с некоторыми .tiff при попытке получить DataRaster[] с использованием метода readDataRaster() (класс GeotiffReader библиотеки NASA WorldWind) выдается исключение:

ERROR j.l.Throwable - java.io.IOException: TIFF file is missing a required tagStripOffsets

Вот сам код, который работает с некоторыми .tiff:

private GeotiffReader reader;
private ByteBufferRaster raster;
...
reader = new GeotiffReader(file);
listDataRaster.add(reader.readDataRaster());
...
DataRaster[] dataRaster = listDataRaster.get(iter);
raster = (ByteBufferRaster)dataRaster[0];
...
raster.setDoubleAtPosition(y, x, value);

Ошибка возникает в следующей строке:

listDataRaster.add(reader.readDataRaster()); 

Метод пытается вернуть DataRaster[] и выдает ошибку.

Моя задача - взять у .tiff-а ByteBufferRaster, а затем использовать setDoubleAtPosition, чтобы внести изменения в сетку после некоторых вычислений и переписать измененный .tiff.

Как исправить эту ошибку? А если никак, есть ли другие способы выполнить мою задачу?

Answer 1

Всем спасибо, задачу смог решить вот таким путем через ExtendedGDALDataRaster

DataRasterReaderFactory readerFactory = (DataRasterReaderFactory) WorldWind
                .createConfigurationComponent(AVKey.DATA_RASTER_READER_FACTORY_CLASS_NAME);
DataRasterReader dataRasterReader;
DataRaster[] dataRasters = null;
...
dataRasterReader = readerFactory.findReaderFor(file, null);
dataRasters = dataRasterReader.read(file, null);
...
rasterGdal = (ExtendedGDALDataRaster) dataRasters[0];
ElevationModel elevationModelFromGlobe = GLOBE.getElevationModel(); 
Sector boundingSector = rasterGdal.getSector();
int[] heightAndWidth = new int[2];  
//Метод для создания пустого сектора по аналогии с текущим          
recalculationHeightAndWidth (boundingSector, elevationModelFromGlobe, heightAndWidth);
//Метод для создания параметров по умолчанию для сектора
AVList params = getParams(boundingSector, heightAndWidth[1], heightAndWidth[0]);
raster = (ByteBufferRaster) ByteBufferRaster.createGeoreferencedRaster(params);
Dataset dataset = rasterGdal.getBestSuitedDataset(heightAndWidth[1], heightAndWidth[0], rasterGdal.getSector());
band = dataset.GetRasterBand(1);

И затем для можно доставать значение высоты любой точки из *.tiff и менять его на свое усмотрение (оно будет лежать в data)

float[] data = new float[1];
band.ReadRaster(x, y, 1, 1, band.getDataType(), data);
READ ALSO
Как протестировать ViewModel

Как протестировать ViewModel

Есть такой класс:

128
В чём разница разница между лямбда-выражениями и ссылками на методы?

В чём разница разница между лямбда-выражениями и ссылками на методы?

IntelliJ IDEA предлагает заменить лямбда-выражения ссылками на методыВ чём разница разница между ними?

158
Не создается таблица даных Hibernate MySql

Не создается таблица даных Hibernate MySql

Перепробовал разные методыОшибок подключения к базе вроде нет

109
Exoplayer повтор видео с общим TimeBar

Exoplayer повтор видео с общим TimeBar

Возможно ли соединить два(или больше) видео так, что бы они имели общий TimeBar(длина была в длину обеих видио, и пользователь мог менять позицию)В...

147