/** @param file */ public void export(File file) { LOG.debug("Writing index file for directory..."); ObjectOutputStream out = null; try { out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file))); out.writeObject(qtree); out.writeObject(createEnvelope(envelope)); out.writeObject(rasterDataInfo); out.writeObject(rasterGeoReference.getOriginLocation()); out.writeDouble(rasterGeoReference.getResolutionX()); out.writeDouble(rasterGeoReference.getResolutionY()); out.writeDouble(rasterGeoReference.getRotationX()); out.writeDouble(rasterGeoReference.getRotationY()); out.writeDouble(rasterGeoReference.getOriginEasting()); out.writeDouble(rasterGeoReference.getOriginNorthing()); out.writeObject(rasterGeoReference.getCrs()); out.writeObject(resolutionInfo); out.writeObject(options); LOG.debug("Done."); } catch (IOException e) { LOG.debug( "Raster pyramid file '{}' could not be written: '{}'.", file, e.getLocalizedMessage()); LOG.trace("Stack trace:", e); } finally { if (out != null) { try { out.close(); } catch (IOException e) { LOG.debug( "Raster pyramid file '{}' could not be closed: '{}'.", file, e.getLocalizedMessage()); LOG.trace("Stack trace:", e); } } } }
/** * Merge two Raster references. Returns a new RasterReference where the upper-left corner is set * to the values of the smallest upper and smallest left ordinate. The resolution is set to the * minimum value (i.e. the highest resolution [unit/pixel]). Some assumptions are made (not * checked): * * <ul> * <li>The pixel location (center/outer) of the origin are equal, if not, the location of the * first reference will be used (translated origin of second) * <li>Crs is identical * <li>rotation around axis are equal * </ul> * * @param geoRef1 * @param geoRef2 * @return new RasterReference */ public static RasterGeoReference merger(RasterGeoReference geoRef1, RasterGeoReference geoRef2) { if (geoRef1 == null) { return geoRef2; } if (geoRef2 == null) { return geoRef1; } RasterGeoReference geoRef2Copy = geoRef2; if (geoRef1.location != geoRef2.location) { double[] orig = geoRef2.getOrigin(geoRef1.location); geoRef2Copy = new RasterGeoReference( geoRef1.location, geoRef2.getResolutionX(), geoRef2.getResolutionY(), geoRef2.getRotationX(), geoRef2.getRotationY(), orig[0], orig[1], geoRef2.crs); } double[] origin1 = geoRef1.getOrigin(); double[] origin2 = geoRef2Copy.getOrigin(); double res1x = geoRef1.getResolutionX(); double res1y = geoRef1.getResolutionY(); double res2x = geoRef2Copy.getResolutionX(); double res2y = geoRef2Copy.getResolutionY(); double nResx = (res1x < 0) ? max(res1x, res2x) : min(res1x, res2x); double nResy = (res1y < 0) ? max(res1y, res2y) : min(res1y, res2y); double nOrigx = (res1x < 0) ? max(origin1[0], origin2[0]) : min(origin1[0], origin2[0]); double nOrigy = (res1y < 0) ? max(origin1[1], origin2[1]) : min(origin1[1], origin2[1]); return new RasterGeoReference( geoRef1.location, nResx, nResy, geoRef1.getRotationX(), geoRef1.getRotationY(), nOrigx, nOrigy, geoRef1.crs); }