private void readTiePointGrids(Document jDomDocument) throws IOException { final String[] tiePointGridNames = product.getTiePointGridNames(); for (String tiePointGridName : tiePointGridNames) { final TiePointGrid tiePointGrid = product.getTiePointGrid(tiePointGridName); String dataFile = DimapProductHelpers.getTiePointDataFile(jDomDocument, tiePointGrid.getName()); dataFile = FileUtils.exchangeExtension(dataFile, DimapProductConstants.IMAGE_FILE_EXTENSION); FileImageInputStream inputStream = null; try { inputStream = new FileImageInputStream(new File(inputDir, dataFile)); final float[] floats = ((float[]) tiePointGrid.getData().getElems()); inputStream.seek(0); inputStream.readFully(floats, 0, floats.length); inputStream.close(); inputStream = null; // See if we have a -180...+180 or a 0...360 degree discontinuity if (tiePointGrid.getDiscontinuity() != TiePointGrid.DISCONT_NONE) { tiePointGrid.setDiscontinuity(TiePointGrid.getDiscontinuity(floats)); } } catch (IOException e) { throw new IOException( MessageFormat.format("I/O error while reading tie-point grid ''{0}''.", tiePointGridName), e); } finally { if (inputStream != null) { inputStream.close(); } } } }
private void addModisTiePointGeoCoding(Product product, NetCDFVariables netCDFVariables) throws IOException { ModisProductDescription prodDesc = prodDb.getProductDescription(product.getProductType()); final String[] geolocationDatasetNames; if (prodDesc.hasExternalGeolocation()) { // @todo 2 tb/tb this relies on the order of the tie point grids in the *.dd file. // better check the metadata for the lat/lon band names - // but for the test products this works fine. geolocationDatasetNames = loadExternalQCFile(product, prodDesc, netCDFVariables); } else { geolocationDatasetNames = prodDesc.getGeolocationDatasetNames(); } if (geolocationDatasetNames != null) { final TiePointGrid latGrid = product.getTiePointGrid(geolocationDatasetNames[0]); final TiePointGrid lonGrid = product.getTiePointGrid(geolocationDatasetNames[1]); if (latGrid != null && lonGrid != null) { // set cyclic behaviour lonGrid.setDiscontinuity(TiePointGrid.DISCONT_AT_180); // and create geo coding GeoCoding coding = new ModisTiePointGeoCoding(latGrid, lonGrid); product.setGeoCoding(coding); } } }
public void testClone() { TiePointGrid grid = new TiePointGrid("abc", 2, 2, 0.1f, 0.2f, 0.3f, 0.4f, new float[]{1.2f, 2.3f, 3.4f, 4.5f}); grid.setDescription("Aha!"); grid.setDiscontinuity(TiePointGrid.DISCONT_AT_180); TiePointGrid gridClone = grid.cloneTiePointGrid(); assertEquals("abc", gridClone.getName()); assertEquals("Aha!", gridClone.getDescription()); assertEquals(TiePointGrid.DISCONT_AT_180, gridClone.getDiscontinuity()); assertEquals(2, gridClone.getRasterWidth()); assertEquals(2, gridClone.getRasterHeight()); assertEquals(0.1f, gridClone.getOffsetX()); assertEquals(0.2f, gridClone.getOffsetY()); assertEquals(0.3f, gridClone.getSubSamplingX()); assertEquals(0.4f, gridClone.getSubSamplingY()); assertNotNull(gridClone.getData()); assertEquals(true, gridClone.getData().getElems() instanceof float[]); float[] dataClone = (float[]) gridClone.getData().getElems(); assertEquals(4, dataClone.length); assertEquals(1.2f, dataClone[0]); assertEquals(2.3f, dataClone[1]); assertEquals(3.4f, dataClone[2]); assertEquals(4.5f, dataClone[3]); assertNotSame(grid.getData().getElems(), dataClone); } }