【问题标题】:"TIFF file is missing a required tag StripOffsets" when working with a class "GeotiffReader"使用“GeotiffReader”类时,“TIFF 文件缺少必需的标签 StripOffsets”
【发布时间】:2019-02-10 18:24:30
【问题描述】:

出现了这样一个问题:使用一些 * .tiff,当尝试使用 NASA WorldWind 库类 GeotiffReader 中的 readDataRaster() 方法获取 DataRaster [] 时,抛出异常:

ERROR 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。如何修复此错误?如果没有,还有其他方法可以完成我的任务吗?

【问题讨论】:

  • 您好,欢迎来到 StackOverflow!在发布上述异常消息时,请始终包含完整的堆栈跟踪,并在您发布的代码中指出异常发生在哪一行。话虽如此,我认为您的代码没有问题,这是 TIFF 文件的问题,它们不符合 TIFF 规范,并且缺少必需的标签。您可能想要添加(或链接) TIFF 文件以确认这确实是问题所在。
  • @haraldK,错误出现在以下行:listDataRaster.add(reader.readDataRaster());该方法尝试返回一个DataRaster[]并给出上述错误
  • 当被要求澄清时,请用所有必要的细节更新问题。不要只在 cmets 中回答。一个更好的问题将帮助你增加得到一个好答案的机会。 ??????

标签: java tiff geotiff worldwind


【解决方案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];  

// 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);

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 2012-10-22
    • 1970-01-01
    • 2013-09-03
    • 2021-09-18
    • 2019-01-19
    • 2018-07-19
    • 2022-10-14
    相关资源
    最近更新 更多