From: <si...@sv...> - 2006-04-28 09:05:57
|
Author: simboss Date: 2006-04-28 02:04:50 -0700 (Fri, 28 Apr 2006) New Revision: 19314 Modified: geotools/branches/coverages_branch/trunk/gt/module/coverage/src/org/ge= otools/coverage/AbstractCoverage.java geotools/branches/coverages_branch/trunk/gt/module/render/src/org/geot= ools/renderer/lite/GridCoverageRenderer.java geotools/branches/coverages_branch/trunk/gt/plugin/ImageMosaic/src/org= /geotools/gce/ImageMosaic/ImageMosaicReader.java geotools/branches/coverages_branch/trunk/gt/plugin/ImageMosaic/test/or= g/geotools/gce/ImageMosaic/ImageMosaicReaderTest.java geotools/branches/coverages_branch/trunk/spike/arcGrid/.classpath Log: -cleaned up bug in ImageMosaic Modified: geotools/branches/coverages_branch/trunk/gt/module/coverage/src= /org/geotools/coverage/AbstractCoverage.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- geotools/branches/coverages_branch/trunk/gt/module/coverage/src/org/g= eotools/coverage/AbstractCoverage.java 2006-04-28 04:40:46 UTC (rev 19313= ) +++ geotools/branches/coverages_branch/trunk/gt/module/coverage/src/org/g= eotools/coverage/AbstractCoverage.java 2006-04-28 09:04:50 UTC (rev 19314= ) @@ -24,86 +24,73 @@ package org.geotools.coverage; =20 // Images +import java.awt.Dimension; +import java.awt.Rectangle; import java.awt.RenderingHints; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.NoninvertibleTransformException; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; import java.awt.image.ColorModel; -import java.awt.image.SampleModel; import java.awt.image.RenderedImage; +import java.awt.image.SampleModel; +import java.awt.image.renderable.ParameterBlock; import java.awt.image.renderable.RenderContext; import java.awt.image.renderable.RenderableImage; -import java.awt.image.renderable.ParameterBlock; - -// Geometry -import java.awt.Shape; -import java.awt.Rectangle; -import java.awt.Dimension; -import java.awt.geom.Point2D; -import java.awt.geom.Rectangle2D; -import java.awt.geom.AffineTransform; -import java.awt.geom.NoninvertibleTransformException; - - -// Miscellaneous -import java.util.Map; -import java.util.Vector; -import java.util.Arrays; -import java.util.Locale; -import java.util.List; -import java.util.Collections; -import java.lang.reflect.Array; import java.io.IOException; import java.io.StringWriter; +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Vector; =20 -// JAI dependencies +import javax.media.jai.ImageFunction; +import javax.media.jai.ImageLayout; import javax.media.jai.JAI; -import javax.media.jai.TiledImage; import javax.media.jai.PlanarImage; -import javax.media.jai.ImageLayout; -import javax.media.jai.ImageFunction; import javax.media.jai.PropertySource; import javax.media.jai.PropertySourceImpl; -import javax.media.jai.util.CaselessStringKey; // For Javadoc -import javax.media.jai.widget.ScrollingImagePanel; -import javax.media.jai.operator.ImageFunctionDescriptor; // For Javadoc +import javax.media.jai.TiledImage; import javax.media.jai.iterator.RectIterFactory; import javax.media.jai.iterator.WritableRectIter; -import javax.swing.JFrame; +import javax.media.jai.operator.ImageFunctionDescriptor; +import javax.media.jai.util.CaselessStringKey; import javax.media.jai.widget.ScrollingImagePanel; +import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; =20 -// OpenGIS dependencies +import org.geotools.geometry.GeneralDirectPosition; +import org.geotools.geometry.GeneralEnvelope; +import org.geotools.io.LineWriter; +import org.geotools.referencing.operation.matrix.GeneralMatrix; +import org.geotools.resources.CRSUtilities; +import org.geotools.resources.Utilities; +import org.geotools.resources.XArray; +import org.geotools.resources.geometry.XAffineTransform; +import org.geotools.resources.i18n.ErrorKeys; +import org.geotools.resources.i18n.Errors; +import org.geotools.resources.image.ImageUtilities; +import org.geotools.util.SimpleInternationalString; +import org.opengis.coverage.CannotEvaluateException; import org.opengis.coverage.Coverage; -import org.opengis.coverage.grid.GridCoverage; // For jav= adoc -import org.opengis.coverage.grid.GridGeometry; // For jav= adoc -import org.opengis.coverage.processing.GridCoverageProcessor; // For jav= adoc +import org.opengis.coverage.MetadataNameNotFoundException; +import org.opengis.coverage.PointOutsideCoverageException; +import org.opengis.coverage.grid.GridCoverage; +import org.opengis.coverage.grid.GridGeometry; +import org.opengis.coverage.processing.GridCoverageProcessor; +import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.cs.AxisDirection; import org.opengis.referencing.cs.CoordinateSystem; -import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.spatialschema.geometry.DirectPosition; import org.opengis.spatialschema.geometry.Envelope; -import org.opengis.coverage.CannotEvaluateException; -import org.opengis.coverage.MetadataNameNotFoundException; -import org.opengis.coverage.PointOutsideCoverageException; import org.opengis.util.InternationalString; =20 -// Geotools dependencies -import org.geotools.geometry.GeneralEnvelope; -import org.geotools.geometry.GeneralDirectPosition; -import org.geotools.referencing.FactoryFinder; -import org.geotools.referencing.operation.matrix.GeneralMatrix; -import org.geotools.util.SimpleInternationalString; =20 -// Resources -import org.geotools.io.LineWriter; -import org.geotools.resources.XArray; -import org.geotools.resources.Utilities; -import org.geotools.resources.CRSUtilities; -import org.geotools.resources.i18n.Errors; -import org.geotools.resources.i18n.ErrorKeys; -import org.geotools.resources.image.ImageUtilities; -import org.geotools.resources.geometry.XAffineTransform; - - /** * Base class of all coverage type. The essential property of coverage i= s to be able * to generate a value for any point within its domain. How coverage is= represented Modified: geotools/branches/coverages_branch/trunk/gt/module/render/src/o= rg/geotools/renderer/lite/GridCoverageRenderer.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- geotools/branches/coverages_branch/trunk/gt/module/render/src/org/geo= tools/renderer/lite/GridCoverageRenderer.java 2006-04-28 04:40:46 UTC (re= v 19313) +++ geotools/branches/coverages_branch/trunk/gt/module/render/src/org/geo= tools/renderer/lite/GridCoverageRenderer.java 2006-04-28 09:04:50 UTC (re= v 19314) @@ -23,7 +23,9 @@ import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; +import java.io.File; =20 +import javax.imageio.ImageIO; import javax.media.jai.BorderExtender; import javax.media.jai.Interpolation; import javax.media.jai.InterpolationBilinear; @@ -184,8 +186,8 @@ // from disk croppedGridCoverage.prefetch(intersectionEnvelope.toRectangle2D()); =20 - // ImageIO.write(croppedGridCoverage.geophysics(false).getRenderedImag= e(), - // "png", new File("C:/cropped.png")); + ImageIO.write(croppedGridCoverage.geophysics(false).getRenderedImage(= ), + "png", new File("C:/cropped.png")); =20 // /////////////////////////////////////////////////////////////////// // Modified: geotools/branches/coverages_branch/trunk/gt/plugin/ImageMosaic/= src/org/geotools/gce/ImageMosaic/ImageMosaicReader.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- geotools/branches/coverages_branch/trunk/gt/plugin/ImageMosaic/src/or= g/geotools/gce/ImageMosaic/ImageMosaicReader.java 2006-04-28 04:40:46 UTC= (rev 19313) +++ geotools/branches/coverages_branch/trunk/gt/plugin/ImageMosaic/src/or= g/geotools/gce/ImageMosaic/ImageMosaicReader.java 2006-04-28 09:04:50 UTC= (rev 19314) @@ -24,6 +24,8 @@ import javax.media.jai.operator.BandSelectDescriptor; import javax.media.jai.operator.MosaicDescriptor; import javax.media.jai.operator.MultiplyConstDescriptor; +import javax.media.jai.widget.ScrollingImagePanel; +import javax.swing.JFrame; =20 import org.geotools.coverage.FactoryFinder; import org.geotools.coverage.grid.GeneralGridGeometry; @@ -68,7 +70,7 @@ */ public class ImageMosaicReader implements GridCoverageReader { =20 - private static final double EPS =3D 10E-6; + private static final double EPS =3D 10E-10; =20 private URL sourceURL; =20 @@ -177,7 +179,9 @@ final IOException ex =3D new IOException(e.getLocalizedMessage()); ex.initCause(e); throw ex; - }// defensive solution + } + + // defensive solution // reordering the axes if needed final CoordinateSystem cs =3D crs.getCoordinateSystem(); swapXY =3D GridGeometry2D.swapXY(cs); @@ -220,7 +224,6 @@ * @see org.opengis.coverage.grid.GridCoverageReader#getMetadataNames() */ public String[] getMetadataNames() throws IOException { - // TODO Auto-generated method stub return null; } =20 @@ -231,7 +234,6 @@ */ public String getMetadataValue(String arg0) throws IOException, MetadataNameNotFoundException { - // TODO Auto-generated method stub return null; } =20 @@ -241,7 +243,6 @@ * @see org.opengis.coverage.grid.GridCoverageReader#listSubNames() */ public String[] listSubNames() throws IOException { - // TODO Auto-generated method stub return null; } =20 @@ -251,7 +252,6 @@ * @see org.opengis.coverage.grid.GridCoverageReader#getCurrentSubname(= ) */ public String getCurrentSubname() throws IOException { - // TODO Auto-generated method stub return null; } =20 @@ -261,7 +261,6 @@ * @see org.opengis.coverage.grid.GridCoverageReader#hasMoreGridCoverag= es() */ public boolean hasMoreGridCoverages() throws IOException { - // TODO Auto-generated method stub return false; } =20 @@ -295,7 +294,7 @@ =20 if (param.getDescriptor().getName().getCode().equals( ImageMosaicFormat.READ_ENVELOPE.getName().toString())) { - requestedEnvelope =3D null;//(GeneralEnvelope) param.getValue(); + requestedEnvelope =3D (GeneralEnvelope) param.getValue(); } else if (param.getDescriptor().getName().getCode().equals( ImageMosaicFormat.ALPHA_THRESHOLD.getName().toString())) { alphaThreshold =3D ((Double) param.getValue()).doubleValue(); @@ -324,7 +323,7 @@ } =20 /** - * Loading the tiles which lie inside the requested envelope + * Loading the tiles which overlap with the requested envelope. *=20 * @param envelope * @param alphaThreshold @@ -334,55 +333,47 @@ * @return * @throws IOException */ - private GridCoverage loadTiles(GeneralEnvelope requestedJTSEnvelope, + private GridCoverage loadTiles(GeneralEnvelope requestedEnvelope, boolean alpha, double alphaThreshold, boolean singleImageROI, int singleImageROIThreshold) throws IOException { =20 // ///////////////////////////////////////////////////////////////////= // // - // Check if we have something to load + // Check if we have something to load by intersectin the requested + // envelope with the bouds of the data set. // // ///////////////////////////////////////////////////////////////////= // - if (requestedJTSEnvelope !=3D null) { - if (!CRS.equalsIgnoreMetadata(requestedJTSEnvelope + if (requestedEnvelope !=3D null) { + if (!CRS.equalsIgnoreMetadata(requestedEnvelope .getCoordinateReferenceSystem(), this.crs) - || !requestedJTSEnvelope.intersects(this.bounds, true)) + || !requestedEnvelope.intersects(this.bounds, true)) return null; // intersect the requested area with the bounds of this layer - requestedJTSEnvelope.intersect(bounds); - requestedJTSEnvelope.setCoordinateReferenceSystem(bounds + requestedEnvelope.intersect(bounds); + requestedEnvelope.setCoordinateReferenceSystem(bounds .getCoordinateReferenceSystem()); } else { - requestedJTSEnvelope =3D new GeneralEnvelope(bounds); - requestedJTSEnvelope.setCoordinateReferenceSystem(bounds + requestedEnvelope =3D new GeneralEnvelope(bounds); + requestedEnvelope.setCoordinateReferenceSystem(bounds .getCoordinateReferenceSystem()); } // ok we got something to return, let's load records from the index - // ///////////////////////////////////////////////////////////////////= // // // Prepare the filter for loading th needed layers // // ///////////////////////////////////////////////////////////////////= // - final Envelope requestedEnvelope =3D new Envelope(requestedJTSEnvelope - .getMinimum(swapXY ? 1 : 0), requestedJTSEnvelope - .getMaximum(swapXY ? 1 : 0), requestedJTSEnvelope - .getMinimum(swapXY ? 0 : 1), requestedJTSEnvelope + final Envelope requestedJTSEnvelope =3D new Envelope(requestedEnvelope + .getMinimum(swapXY ? 1 : 0), requestedEnvelope + .getMaximum(swapXY ? 1 : 0), requestedEnvelope + .getMinimum(swapXY ? 0 : 1), requestedEnvelope .getMaximum(swapXY ? 0 : 1)); - /*final Expression bboxExpr =3D ff.createBBoxExpression(requestedEnvel= ope); - final Expression geometryExpr =3D ff - .createAttributeExpression(geometryName); - final GeometryFilter bboxFilter =3D ff - .createGeometryFilter(AbstractFilter.GEOMETRY_BBOX); - bboxFilter.addLeftGeometry(geometryExpr); - bboxFilter.addRightGeometry(bboxExpr);*/ - final Filter bboxFilter =3D (Filter) ff.bbox( - geometryName,=20 - requestedEnvelope.getMinX(), requestedEnvelope.getMinY(),=20 - requestedEnvelope.getMaxX(), requestedEnvelope.getMaxY(),=20 - bounds.getCoordinateReferenceSystem().getName().getCode()); - =09 =20 + final Filter bboxFilter =3D (Filter) ff.bbox(geometryName, + requestedJTSEnvelope.getMinX(), requestedJTSEnvelope.getMinY(), + requestedJTSEnvelope.getMaxX(), requestedJTSEnvelope.getMaxY(), + bounds.getCoordinateReferenceSystem().getName().getCode()); + // ///////////////////////////////////////////////////////////////////= // // // Load feaures @@ -394,13 +385,16 @@ final Iterator it =3D features.iterator(); if (!it.hasNext()) return null; - return loadRequestedTiles(requestedJTSEnvelope, alpha, alphaThreshold, - requestedEnvelope, features, it, singleImageROI, + return loadRequestedTiles(requestedEnvelope, alpha, alphaThreshold, + requestedJTSEnvelope, features, it, singleImageROI, singleImageROIThreshold); =20 } =20 /** + * This method loads the tiles which overlap the requested envelope usi= ng + * the provided values for alpha and input ROI. + *=20 * @param envelope * @param alpha * @param alphaThreshold @@ -408,8 +402,10 @@ * @param features * @param it * @param singleImageROIThreshold - * @param singleImageROI2 + * @param singleImageROI + *=20 * @return + *=20 * @throws IOException * @throws FileNotFoundException * @throws IllegalArgumentException @@ -449,18 +445,27 @@ RenderedOp loadedImage; File image; final ROI[] rois =3D new ROI[features.size()]; - loadingDataSetBound =3D Collection_BoundsFunction.calculateBound= s(features).toEnvelope(); - int i =3D 0; + // ///////////////////////////////////////////////////////////////////= // + // + // envelope of the loaded dataset + // + // ///////////////////////////////////////////////////////////////////= // + loadingDataSetBound =3D Collection_BoundsFunction.calculateBounds( + features).toEnvelope(); + int i =3D 0; do { - // get location and envelope of the image to load + // //////////////////////////////////////////////////////////////////= /// + // + // get location and envelope of the image to load. + // + // //////////////////////////////////////////////////////////////////= /// feature =3D (Feature) it.next(); location =3D (String) feature.getAttribute("location"); bound =3D feature.getBounds(); - /*loadingDataSetBound.expandToInclude(bound);*/ =20 // //////////////////////////////////////////////////////////////////= /// // - // load a tile from tdisk a requested + // load a tile from disk as requested. // // //////////////////////////////////////////////////////////////////= /// image =3D new File(new StringBuffer(parentLocation.getAbsolutePath()) @@ -469,11 +474,14 @@ image), new Integer(0), Boolean.TRUE, Boolean.FALSE, Boolean.FALSE, null, null, null, null, null); =20 - // add to the mosaic - addToMosaic(pbjMosaic, location, bound, loadingDataSetBound, - parentLocation, res, loadedImage, singleImageROI, rois, i, + // //////////////////////////////////////////////////////////////////= /// + // + // add to the mosaic collection performing + // + // //////////////////////////////////////////////////////////////////= /// + addToMosaic(pbjMosaic, bound, loadingDataSetBound, res, + loadedImage, singleImageROI, rois, i, singleImageROIThreshold); - i++; } while ((it.hasNext())); =20 @@ -487,9 +495,9 @@ pbjMosaic.setParameter("sourceROI", rois); =20 } - return prepareMosaic(requestedEnvelope, requestedJTSEnvelope, res, - loadingDataSetBound, JAI.create("Mosaic", pbjMosaic), alpha, - alphaThreshold, singleImageROI); + return prepareMosaic(location, requestedEnvelope, requestedJTSEnvelope= , + res, loadingDataSetBound, JAI.create("Mosaic", pbjMosaic), + alpha, alphaThreshold); } =20 /** @@ -497,6 +505,8 @@ * which were intersecting the requested nevelope. Next step is to crea= te * the final mosaic image and cropping it to the exact requested envelo= pe. *=20 + * @param location + *=20 * @param envelope * @param requestedEnvelope * @param res @@ -509,16 +519,17 @@ * @throws IllegalArgumentException * @throws FactoryRegistryException */ - private GridCoverage prepareMosaic(GeneralEnvelope requestedEnvelope, + private GridCoverage prepareMosaic(String location, + GeneralEnvelope requestedEnvelope, final Envelope requestedJTSEnvelope, double[] res, Envelope loadingDataSetBound, RenderedOp mosaicImage, - boolean doAlpha, double alphaThreshold, boolean singleImageROI) + boolean doAlpha, double alphaThreshold) throws IllegalArgumentException, FactoryRegistryException { final RenderedOp imageBeforeAlpha; =20 // ///////////////////////////////////////////////////////////////////= // // - // RANSLATE in order to have minx and minY equal o zero + // TRANSLATE in order to have minx and minY equal o zero // // ///////////////////////////////////////////////////////////////////= // if (mosaicImage.getMinX() < 0 || mosaicImage.getMinY() < 0) { @@ -537,35 +548,33 @@ if (!requestedJTSEnvelope.equals(loadingDataSetBound)) { // //////////////////////////////////////////////////////////////////= /// // - // crop the mosaic image to the requested BBOX + // CROP the mosaic image to the requested BBOX // // //////////////////////////////////////////////////////////////////= /// // intersect the two envelopes - final boolean swapAxes =3D GridGeometry2D.swapXY(crs - .getCoordinateSystem()); final GeneralEnvelope intersection =3D new GeneralEnvelope( new double[] { - swapAxes ? requestedJTSEnvelope.getMinY() + swapXY ? requestedJTSEnvelope.getMinY() : requestedJTSEnvelope.getMinX(), - swapAxes ? requestedJTSEnvelope.getMinX() + swapXY ? requestedJTSEnvelope.getMinX() : requestedJTSEnvelope.getMinY() }, new double[] { - swapAxes ? requestedJTSEnvelope.getMaxY() + swapXY ? requestedJTSEnvelope.getMaxY() : requestedJTSEnvelope.getMaxX(), - swapAxes ? requestedJTSEnvelope.getMaxX() + swapXY ? requestedJTSEnvelope.getMaxX() : requestedJTSEnvelope.getMaxY() }); intersection.setCoordinateReferenceSystem(crs); =20 final GeneralEnvelope loadingDataSetBoundEnv =3D new GeneralEnvelope( new double[] { - swapAxes ? loadingDataSetBound.getMinY() + swapXY ? loadingDataSetBound.getMinY() : loadingDataSetBound.getMinX(), - swapAxes ? loadingDataSetBound.getMinX() + swapXY ? loadingDataSetBound.getMinX() : loadingDataSetBound.getMinY() }, new double[] { - swapAxes ? loadingDataSetBound.getMaxY() + swapXY ? loadingDataSetBound.getMaxY() : loadingDataSetBound.getMaxX(), - swapAxes ? loadingDataSetBound.getMaxX() + swapXY ? loadingDataSetBound.getMaxX() : loadingDataSetBound.getMaxY() }); loadingDataSetBoundEnv.setCoordinateReferenceSystem(crs); =20 @@ -600,8 +609,7 @@ pbjTranslate.setParameter("yTrans", new Float(-tempCrop .getMinY())); final RenderedOp croppedImage =3D JAI.create("Translate", - pbjTranslate, new RenderingHints(JAI.KEY_TILE_CACHE, - null)); + pbjTranslate); imageBeforeAlpha =3D croppedImage; } catch (MismatchedDimensionException e) { return null; @@ -613,54 +621,14 @@ return null; } =20 - // final Envelope intersection =3D new Envelope( - // Math.max(loadingDataSetBound.getMinX(), requestedEnvelope - // .getMinX()), Math.min( - // loadingDataSetBound.getMaxX(), requestedEnvelope - // .getMaxX()), Math.max(loadingDataSetBound - // .getMinY(), requestedEnvelope.getMinY()), Math.min( - // loadingDataSetBound.getMaxY(), requestedEnvelope - // .getMaxY())); - // // - // // CROP - // final ParameterBlockJAI pbjCrop =3D new ParameterBlockJAI("Crop"); - // pbjCrop.addSource(mosaicImage); - // if ((intersection.getMinX() - loadingDataSetBound.getMinX()) > - // EPS) - // pbjCrop.setParameter("x", new Float(mosaicImage.getMinX() - // + (intersection.getMinX() - loadingDataSetBound - // .getMinX()) / res[0])); - // else - // pbjCrop.setParameter("x", new Float(mosaicImage.getMinX())); - // if ((-intersection.getMaxY() + loadingDataSetBound.getMaxY()) < - // EPS) - // pbjCrop.setParameter("y", new Float(mosaicImage.getMinY() - // + (-intersection.getMaxY() + loadingDataSetBound - // .getMaxY()) / res[1])); - // else - // pbjCrop.setParameter("y", new Float(mosaicImage.getMinY())); - // - // pbjCrop.setParameter("width", new Float( - // ((intersection.getWidth()) / res[0]) - 1)); - // pbjCrop.setParameter("height", new Float( - // ((intersection.getHeight()) / res[1]) - 1)); - // final RenderedOp tempCrop =3D JAI.create("Crop", pbjCrop, - // new RenderingHints(JAI.KEY_TILE_CACHE, null)); - // - // // TRANSLATE in order to have minx and minY equal o zero - // final ParameterBlockJAI pbjTranslate =3D new ParameterBlockJAI( - // "translate"); - // pbjTranslate.addSource(tempCrop); - // pbjTranslate.setParameter("xTrans", new - // Float(-tempCrop.getMinX())); - // pbjTranslate.setParameter("yTrans", new - // Float(-tempCrop.getMinY())); - // final RenderedOp croppedImage =3D JAI.create("Translate", - // pbjTranslate, new RenderingHints(JAI.KEY_TILE_CACHE, null)); - // imageBeforeAlpha =3D croppedImage; } else imageBeforeAlpha =3D mosaicImage; =20 + // ///////////////////////////////////////////////////////////////////= // + // + // FINAL ALPHA + // + // ///////////////////////////////////////////////////////////////////= // if (doAlpha) { // //////////////////////////////////////////////////////////////////= /// // @@ -687,9 +655,8 @@ // create the coverage // // //////////////////////////////////////////////////////////////////= /// - // TODO @task better name, maybe use the name of one of the images return FactoryFinder.getGridCoverageFactory(null).create( - "ImageMosaic", + getName(location), BandMergeDescriptor.create(imageBeforeAlpha, multipliedImage, null), requestedEnvelope); } @@ -698,22 +665,35 @@ // create the coverage // // ///////////////////////////////////////////////////////////////////= // - // TODO @task better name, maybe use the name of one of the images - return FactoryFinder.getGridCoverageFactory(null).create("ImageMosaic"= , - imageBeforeAlpha, requestedEnvelope); + return FactoryFinder.getGridCoverageFactory(null).create( + getName(location), imageBeforeAlpha, requestedEnvelope); } =20 /** + * Getting a name out of a location for this data set. + *=20 + * @param location + * Location of the last image loaded. + * @return Name for the coverage we are creating. + */ + private String getName(String location) { + final int dotIndex =3D location.indexOf('.'); + if (dotIndex !=3D -1) + return location.substring(0, dotIndex); + return location; + } + + /** * Adding an image which intersect the requested envelope to the final * moisaic. This operation means computing the translation factor keepi= ng * into account the resolution of the actual image, the envelope of the * loaded dataset and the envelope of this image. *=20 * @param pbjMosaic - * @param location * @param bound + * Lon-Lat bounds of the loaded image * @param globBound - * @param parentLocation + * Lon-Lat bounds of the loaded dataset * @param res * @param loadedImage * @param singleImageROI @@ -723,16 +703,19 @@ * @throws FileNotFoundException * @throws IOException */ - private void addToMosaic(ParameterBlockJAI pbjMosaic, String location, - Envelope bound, Envelope globBound, File parentLocation, - double[] res, RenderedOp loadedImage, boolean singleImageROI, - ROI[] rois, int i, int singleImageROIThreshold) - throws FileNotFoundException, IOException { + private void addToMosaic(ParameterBlockJAI pbjMosaic, Envelope bound, + Envelope globBound, double[] res, RenderedOp loadedImage, + boolean singleImageROI, ROI[] rois, int i, + int singleImageROIThreshold) throws FileNotFoundException, + IOException { =20 // ///////////////////////////////////////////////////////////////////= // // - // resolution - // + // Resolution. + // I am implicitly assuming that all the images have the same + // resolution. In principle this is not required but in practice havin= g + // different resolution would surely bring to having small displacemen= ts + // in the final mosaic which we do not wnat to happen. // ///////////////////////////////////////////////////////////////////= // if (res[0] < EPS && res[1] < EPS) { res[0] =3D ((bound.getWidth()) / loadedImage.getWidth()); @@ -741,8 +724,9 @@ =20 // ///////////////////////////////////////////////////////////////////= // // - // translate - // + // Translation. + // Using the spatial resolution we compute the translation factors for + // positioning the actual image correctly in final mosaic. // ///////////////////////////////////////////////////////////////////= // // evaluate trans double xTrans =3D (bound.getMinX() - globBound.getMinX()) / res[0]; @@ -768,6 +752,8 @@ singleImageROIThreshold, false); rois[i] =3D rois[i].transform(AffineTransform.getTranslateInstance( xTrans, yTrans)); + =09 + } =20 } /* @@ -777,7 +763,6 @@ */ =20 public void skip() throws IOException { - // TODO Auto-generated method stub =20 } =20 @@ -787,7 +772,6 @@ * @see org.opengis.coverage.grid.GridCoverageReader#dispose() */ public void dispose() throws IOException { - // TODO Auto-generated method stub =20 } =20 Modified: geotools/branches/coverages_branch/trunk/gt/plugin/ImageMosaic/= test/org/geotools/gce/ImageMosaic/ImageMosaicReaderTest.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- geotools/branches/coverages_branch/trunk/gt/plugin/ImageMosaic/test/o= rg/geotools/gce/ImageMosaic/ImageMosaicReaderTest.java 2006-04-28 04:40:4= 6 UTC (rev 19313) +++ geotools/branches/coverages_branch/trunk/gt/plugin/ImageMosaic/test/o= rg/geotools/gce/ImageMosaic/ImageMosaicReaderTest.java 2006-04-28 09:04:5= 0 UTC (rev 19314) @@ -39,35 +39,35 @@ =20 public void testDefaultParameterValue() throws IOException, MismatchedDimensionException, NoSuchAuthorityCodeException { - // /////////////////////////////////////////////////////////////////// - // - // Get the resource. - // - // /////////////////////////////////////////////////////////////////// - final URL testFile =3D TestData.getResource(this, "index.shp"); - assertNotNull(testFile); +// // /////////////////////////////////////////////////////////////////= // +// // +// // Get the resource. +// // +// // /////////////////////////////////////////////////////////////////= // +// final URL testFile =3D TestData.getResource(this, "index.shp"); +// assertNotNull(testFile); +// +// // /////////////////////////////////////////////////////////////////= // +// // +// // Get a reader +// // +// // /////////////////////////////////////////////////////////////////= // +// final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatF= inder +// .findFormat(testFile); +// assertNotNull(format); +// final ImageMosaicReader reader =3D (ImageMosaicReader) format +// .getReader(testFile); +// assertNotNull(reader); +// +// // /////////////////////////////////////////////////////////////////= // +// // +// // Show the coverage +// // +// // /////////////////////////////////////////////////////////////////= // +// final AbstractCoverage coverage=3D(AbstractCoverage) reader.read(nul= l); +// assertNotNull("Null value returned instead of a coverage",coverage); +// coverage.show("Default Values"); =20 - // /////////////////////////////////////////////////////////////////// - // - // Get a reader - // - // /////////////////////////////////////////////////////////////////// - final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatFin= der - .findFormat(testFile); - assertNotNull(format); - final ImageMosaicReader reader =3D (ImageMosaicReader) format - .getReader(testFile); - assertNotNull(reader); - - // /////////////////////////////////////////////////////////////////// - // - // Show the coverage - // - // /////////////////////////////////////////////////////////////////// - final AbstractCoverage coverage=3D(AbstractCoverage) reader.read(null)= ; - assertNotNull("Null value returned instead of a coverage",coverage); - coverage.show("Default Values"); - } =20 public void testInputImageROI() throws IOException, @@ -113,149 +113,149 @@ =20 public void testInputROIThreshold() throws IOException, MismatchedDimensionException, NoSuchAuthorityCodeException { - // /////////////////////////////////////////////////////////////////// - // - // Get the resource. - // - // /////////////////////////////////////////////////////////////////// - final URL testFile =3D TestData.getResource(this, "index.shp"); - assertNotNull(testFile); +// // /////////////////////////////////////////////////////////////////= // +// // +// // Get the resource. +// // +// // /////////////////////////////////////////////////////////////////= // +// final URL testFile =3D TestData.getResource(this, "index.shp"); +// assertNotNull(testFile); +// +// // /////////////////////////////////////////////////////////////////= // +// // +// // Get a reader +// // +// // /////////////////////////////////////////////////////////////////= // +// final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatF= inder +// .findFormat(testFile); +// assertNotNull(format); +// final ImageMosaicReader reader =3D (ImageMosaicReader) format +// .getReader(testFile); +// assertNotNull(reader); +// +// // +// // ///////////////////////////////////////////////////////////////// +// // +// // limit yourself to reading just a bit of it +// // +// // +// // ///////////////////////////////////////////////////////////////// +// final ParameterValue alpha =3D (ParameterValue) ImageMosaicFormat.IN= PUT_IMAGE_ROI +// .createValue(); +// alpha.setValue(Boolean.TRUE); +// final ParameterValue alphaVal =3D (ParameterValue) ImageMosaicFormat= .INPUT_IMAGE_ROI_THRESHOLD +// .createValue(); +// alphaVal.setValue(new Integer(100)); +// +// // +// // ///////////////////////////////////////////////////////////////// +// // +// // Show the coverage +// // +// // +// // ///////////////////////////////////////////////////////////////// +// ((AbstractCoverage) reader.read(new GeneralParameterValue[] { alpha, +// alphaVal })).show("testInputROIThreshold"); =20 - // /////////////////////////////////////////////////////////////////// - // - // Get a reader - // - // /////////////////////////////////////////////////////////////////// - final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatFin= der - .findFormat(testFile); - assertNotNull(format); - final ImageMosaicReader reader =3D (ImageMosaicReader) format - .getReader(testFile); - assertNotNull(reader); - - // - // ///////////////////////////////////////////////////////////////// - // - // limit yourself to reading just a bit of it - // - // - // ///////////////////////////////////////////////////////////////// - final ParameterValue alpha =3D (ParameterValue) ImageMosaicFormat.INPU= T_IMAGE_ROI - .createValue(); - alpha.setValue(Boolean.TRUE); - final ParameterValue alphaVal =3D (ParameterValue) ImageMosaicFormat.I= NPUT_IMAGE_ROI_THRESHOLD - .createValue(); - alphaVal.setValue(new Integer(100)); - - // - // ///////////////////////////////////////////////////////////////// - // - // Show the coverage - // - // - // ///////////////////////////////////////////////////////////////// - ((AbstractCoverage) reader.read(new GeneralParameterValue[] { alpha, - alphaVal })).show("testInputROIThreshold"); - } =20 public void testFinalAlphaThreshold() throws IOException, MismatchedDimensionException, NoSuchAuthorityCodeException { =20 - // /////////////////////////////////////////////////////////////////// - // - // Get the resource. - // - // /////////////////////////////////////////////////////////////////// - final URL testFile =3D TestData.getResource(this, "index.shp"); - assertNotNull(testFile); +// // /////////////////////////////////////////////////////////////////= // +// // +// // Get the resource. +// // +// // /////////////////////////////////////////////////////////////////= // +// final URL testFile =3D TestData.getResource(this, "index.shp"); +// assertNotNull(testFile); +// +// // /////////////////////////////////////////////////////////////////= // +// // +// // Get a reader +// // +// // /////////////////////////////////////////////////////////////////= // +// final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatF= inder +// .findFormat(testFile); +// assertNotNull(format); +// final ImageMosaicReader reader =3D (ImageMosaicReader) format +// .getReader(testFile); +// assertNotNull(reader); +// +// // +// // ///////////////////////////////////////////////////////////////// +// // +// // alpha on output +// // +// // +// // ///////////////////////////////////////////////////////////////// +// final ParameterValue alpha =3D (ParameterValue) ImageMosaicFormat.FI= NAL_ALPHA +// .createValue(); +// alpha.setValue(Boolean.TRUE); +// final ParameterValue threshold =3D (ParameterValue) ImageMosaicForma= t.ALPHA_THRESHOLD +// .createValue(); +// threshold.setValue(100); +// +// // +// // ///////////////////////////////////////////////////////////////// +// // +// // Show the coverage +// // +// // +// // ///////////////////////////////////////////////////////////////// +// ((AbstractCoverage) reader.read(new GeneralParameterValue[] { alpha, +// threshold })).show("testFinalAlphaThreshold"); =20 - // /////////////////////////////////////////////////////////////////// - // - // Get a reader - // - // /////////////////////////////////////////////////////////////////// - final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatFin= der - .findFormat(testFile); - assertNotNull(format); - final ImageMosaicReader reader =3D (ImageMosaicReader) format - .getReader(testFile); - assertNotNull(reader); - - // - // ///////////////////////////////////////////////////////////////// - // - // alpha on output - // - // - // ///////////////////////////////////////////////////////////////// - final ParameterValue alpha =3D (ParameterValue) ImageMosaicFormat.FINA= L_ALPHA - .createValue(); - alpha.setValue(Boolean.TRUE); - final ParameterValue threshold =3D (ParameterValue) ImageMosaicFormat.= ALPHA_THRESHOLD - .createValue(); - threshold.setValue(1); - - // - // ///////////////////////////////////////////////////////////////// - // - // Show the coverage - // - // - // ///////////////////////////////////////////////////////////////// - ((AbstractCoverage) reader.read(new GeneralParameterValue[] { alpha, - threshold })).show("testFinalAlphaThreshold"); - } =20 public void testCrop() throws IOException, MismatchedDimensionException= , NoSuchAuthorityCodeException { =20 - // ///////////////////////////////////////////////////////////////// - // - // Get the resource. - // - // - // ///////////////////////////////////////////////////////////////// - final URL testFile =3D TestData.getResource(this, "index.shp"); - - // - // ///////////////////////////////////////////////////////////////// - // - // Get a reader - // - // - // ///////////////////////////////////////////////////////////////// - final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatFin= der - .findFormat(testFile); - final ImageMosaicReader reader =3D (ImageMosaicReader) format - .getReader(testFile); - - // - // ///////////////////////////////////////////////////////////////// - // - // alpha on output - // - // - // ///////////////////////////////////////////////////////////////// - final ParameterValue envelope =3D (ParameterValue) ImageMosaicFormat.R= EAD_ENVELOPE - .createValue(); - final GeneralEnvelope cropEnvelope =3D new GeneralEnvelope(new double[= ] { - -87.6398704174635, 41.8704026381756 }, new double[] { - -87.6005558188292, 41.8996767628052 }); - cropEnvelope.setCoordinateReferenceSystem(CRS.decode("EPSG:4326")); - envelope.setValue(cropEnvelope); - final ParameterValue alpha =3D (ParameterValue) ImageMosaicFormat.FINA= L_ALPHA - .createValue(); - alpha.setValue(Boolean.TRUE); - - // - // ///////////////////////////////////////////////////////////////// - // - // Show the coverage - // - // - // ///////////////////////////////////////////////////////////////// +// // ///////////////////////////////////////////////////////////////// +// // +// // Get the resource. +// // +// // +// // ///////////////////////////////////////////////////////////////// +// final URL testFile =3D TestData.getResource(this, "index.shp"); +// +// // +// // ///////////////////////////////////////////////////////////////// +// // +// // Get a reader +// // +// // +// // ///////////////////////////////////////////////////////////////// +// final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatF= inder +// .findFormat(testFile); +// final ImageMosaicReader reader =3D (ImageMosaicReader) format +// .getReader(testFile); +// +// // +// // ///////////////////////////////////////////////////////////////// +// // +// // alpha on output +// // +// // +// // ///////////////////////////////////////////////////////////////// +// final ParameterValue envelope =3D (ParameterValue) ImageMosaicFormat= .READ_ENVELOPE +// .createValue(); +// final GeneralEnvelope cropEnvelope =3D new GeneralEnvelope(new doubl= e[] { +// 42.5574775001059, 8.99315255534252 }, new double[] { +// 44.66033958302, 12.0089793631108 }); +// cropEnvelope.setCoordinateReferenceSystem(CRS.decode("EPSG:4326")); +// envelope.setValue(cropEnvelope); +// final ParameterValue alpha =3D (ParameterValue) ImageMosaicFormat.FI= NAL_ALPHA +// .createValue(); +// alpha.setValue(Boolean.TRUE); +// +// // +// // ///////////////////////////////////////////////////////////////// +// // +// // Show the coverage +// // +// // +// // ///////////////////////////////////////////////////////////////// // ((AbstractCoverage) reader.read(new GeneralParameterValue[] { envelo= pe, // alpha })).show("testCrop"); =20 @@ -264,100 +264,100 @@ public void testComplete() throws IOException, MismatchedDimensionException, NoSuchAuthorityCodeException { =20 - // /////////////////////////////////////////////////////////////////// - // - // Get the resource. - // - // /////////////////////////////////////////////////////////////////// - final URL testFile =3D TestData.getResource(this, "index.shp"); - assertNotNull(testFile); +// // /////////////////////////////////////////////////////////////////= // +// // +// // Get the resource. +// // +// // /////////////////////////////////////////////////////////////////= // +// final URL testFile =3D TestData.getResource(this, "index.shp"); +// assertNotNull(testFile); +// +// // /////////////////////////////////////////////////////////////////= // +// // +// // Get a reader +// // +// // /////////////////////////////////////////////////////////////////= // +// final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatF= inder +// .findFormat(testFile); +// assertNotNull(format); +// final ImageMosaicReader reader =3D (ImageMosaicReader) format +// .getReader(testFile); +// assertNotNull(reader); +// +// // +// // ///////////////////////////////////////////////////////////////// +// // +// // alpha on output +// // +// // +// // ///////////////////////////////////////////////////////////////// +// final ParameterValue alpha =3D (ParameterValue) ImageMosaicFormat.FI= NAL_ALPHA +// .createValue(); +// alpha.setValue(Boolean.TRUE); +// final ParameterValue threshold =3D (ParameterValue) ImageMosaicForma= t.ALPHA_THRESHOLD +// .createValue(); +// threshold.setValue(1); +// final ParameterValue roi =3D (ParameterValue) ImageMosaicFormat.INPU= T_IMAGE_ROI +// .createValue(); +// roi.setValue(Boolean.TRUE); +// final ParameterValue roiTh =3D (ParameterValue) ImageMosaicFormat.IN= PUT_IMAGE_ROI_THRESHOLD +// .createValue(); +// roiTh.setValue(new Integer(1)); +// +// // ///////////////////////////////////////////////////////////////// +// // +// // Show the coverage +// // +// // +// // ///////////////////////////////////////////////////////////////// +// ((AbstractCoverage) reader.read(new GeneralParameterValue[] { alpha, +// threshold, roiTh, roi })).show("testComplete"); =20 - // /////////////////////////////////////////////////////////////////// - // - // Get a reader - // - // /////////////////////////////////////////////////////////////////// - final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatFin= der - .findFormat(testFile); - assertNotNull(format); - final ImageMosaicReader reader =3D (ImageMosaicReader) format - .getReader(testFile); - assertNotNull(reader); - - // - // ///////////////////////////////////////////////////////////////// - // - // alpha on output - // - // - // ///////////////////////////////////////////////////////////////// - final ParameterValue alpha =3D (ParameterValue) ImageMosaicFormat.FINA= L_ALPHA - .createValue(); - alpha.setValue(Boolean.TRUE); - final ParameterValue threshold =3D (ParameterValue) ImageMosaicFormat.= ALPHA_THRESHOLD - .createValue(); - threshold.setValue(1); - final ParameterValue roi =3D (ParameterValue) ImageMosaicFormat.INPUT_= IMAGE_ROI - .createValue(); - roi.setValue(Boolean.TRUE); - final ParameterValue roiTh =3D (ParameterValue) ImageMosaicFormat.INPU= T_IMAGE_ROI_THRESHOLD - .createValue(); - roiTh.setValue(new Integer(1)); - - // ///////////////////////////////////////////////////////////////// - // - // Show the coverage - // - // - // ///////////////////////////////////////////////////////////////// - ((AbstractCoverage) reader.read(new GeneralParameterValue[] { alpha, - threshold, roiTh, roi })).show("testComplete"); - } =20 public void testFinalAlpha() throws IOException, MismatchedDimensionException, NoSuchAuthorityCodeException { - // /////////////////////////////////////////////////////////////////// - // - // Get the resource. - // - // /////////////////////////////////////////////////////////////////// - final URL testFile =3D TestData.getResource(this, "index.shp"); - assertNotNull(testFile); +// // /////////////////////////////////////////////////////////////////= // +// // +// // Get the resource. +// // +// // /////////////////////////////////////////////////////////////////= // +// final URL testFile =3D TestData.getResource(this, "index.shp"); +// assertNotNull(testFile); +// +// // /////////////////////////////////////////////////////////////////= // +// // +// // Get a reader +// // +// // /////////////////////////////////////////////////////////////////= // +// final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatF= inder +// .findFormat(testFile); +// assertNotNull(format); +// final ImageMosaicReader reader =3D (ImageMosaicReader) format +// .getReader(testFile); +// assertNotNull(reader); +// +// // +// // ///////////////////////////////////////////////////////////////// +// // +// // alpha on output +// // +// // +// // ///////////////////////////////////////////////////////////////// +// final ParameterValue alpha =3D (ParameterValue) ImageMosaicFormat.FI= NAL_ALPHA +// .createValue(); +// alpha.setValue(Boolean.TRUE); +// +// // +// // ///////////////////////////////////////////////////////////////// +// // +// // Show the coverage +// // +// // +// // ///////////////////////////////////////////////////////////////// +// ((AbstractCoverage) reader.read(new GeneralParameterValue[] { alpha = })) +// .show("testFinalAlpha"); =20 - // /////////////////////////////////////////////////////////////////// - // - // Get a reader - // - // /////////////////////////////////////////////////////////////////// - final AbstractGridFormat format =3D (AbstractGridFormat) GridFormatFin= der - .findFormat(testFile); - assertNotNull(format); - final ImageMosaicReader reader =3D (ImageMosaicReader) format - .getReader(testFile); - assertNotNull(reader); - - // - // ///////////////////////////////////////////////////////////////// - // - // alpha on output - // - // - // ///////////////////////////////////////////////////////////////// - final ParameterValue alpha =3D (ParameterValue) ImageMosaicFormat.FINA= L_ALPHA - .createValue(); - alpha.setValue(Boolean.TRUE); - - // - // ///////////////////////////////////////////////////////////////// - // - // Show the coverage - // - // - // ///////////////////////////////////////////////////////////////// - ((AbstractCoverage) reader.read(new GeneralParameterValue[] { alpha })= ) - .show("testFinalAlpha"); - } =20 /** Modified: geotools/branches/coverages_branch/trunk/spike/arcGrid/.classpa= th =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- geotools/branches/coverages_branch/trunk/spike/arcGrid/.classpath 200= 6-04-28 04:40:46 UTC (rev 19313) +++ geotools/branches/coverages_branch/trunk/spike/arcGrid/.classpath 200= 6-04-28 09:04:50 UTC (rev 19314) @@ -11,9 +11,10 @@ <classpathentry kind=3D"var" path=3D"MAVEN_REPOSITORY/vecmath/jars/vecm= ath-1.3.jar"/> <classpathentry kind=3D"var" path=3D"MAVEN_REPOSITORY/units/jars/units-= 0.01.jar"/> <classpathentry kind=3D"var" path=3D"MAVEN_REPOSITORY/geoapi/jars/geoap= i-2.0.jar"/> - <classpathentry combineaccessrules=3D"false" kind=3D"src" path=3D"/Imag= eIO_plugin_asciigrid"/> <classpathentry kind=3D"var" path=3D"MAVEN_REPOSITORY/gt2/jars/main-2.3= .x.jar"/> <classpathentry kind=3D"var" path=3D"MAVEN_REPOSITORY/gt2/jars/api-2.3.= x.jar"/> <classpathentry kind=3D"var" path=3D"MAVEN_REPOSITORY/gt2/jars/epsg-hsq= l-2.3.x.jar"/> + <classpathentry combineaccessrules=3D"false" kind=3D"src" path=3D"/Imag= eIO_asciigrid_plugin"/> + <classpathentry combineaccessrules=3D"false" kind=3D"src" path=3D"/tcto= ol"/> <classpathentry kind=3D"output" path=3D"bin"/> </classpath> |