簡體   English   中英

使用類“GeotiffReader”時,“TIFF 文件缺少必需的標簽 StripOffsets”

[英]"TIFF file is missing a required tag StripOffsets" when working with a class "GeotiffReader"

出現了這樣一個問題:使用一些*.tiff,嘗試使用NASA WorldWind庫類GeotiffReader中的readDataRaster()方法獲取DataRaster[]時,拋出異常:

錯誤 jlThrowable - 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。 我該如何解決這個錯誤? 如果沒有,還有其他方法可以完成我的任務嗎?

謝謝大家,我們要求通過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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM