«В файле TIFF отсутствует обязательный тег StripOffsets» при работе с классом «GeotiffReader» - PullRequest
0 голосов
/ 05 сентября 2018

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

ОШИБКА j.l.Throwable - java.io.IOException: в файле TIFF отсутствует обязательный 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. Как я могу исправить эту ошибку? А если нет, есть ли другие способы выполнить мою задачу?

1 Ответ

0 голосов
/ 04 октября 2018

Спасибо всем, мы требуем решить эту проблему через 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];  

// Method for creating an empty sector by analogy with the current one  
recalculationHeightAndWidth (boundingSector, elevationModelFromGlobe, heightAndWidth);


// Method to create default parameters for the sector
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 и изменить его на свое усмотрение (оно будет в данных)

float[] data = new float[1];
band.ReadRaster(x, y, 1, 1, band.getDataType(), data);
...