Package org.geotools.coverageio.gdal.mrsid

Source Code of org.geotools.coverageio.gdal.mrsid.MrSIDReader

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2007-2008, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*/
package org.geotools.coverageio.gdal.mrsid;

import it.geosolutions.imageio.plugins.mrsid.MrSIDImageReaderSpi;

import java.io.IOException;
import java.util.logging.Logger;

import javax.imageio.ImageReader;

import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.coverageio.gdal.BaseGDALGridCoverage2DReader;
import org.geotools.data.DataSourceException;
import org.geotools.factory.Hints;
import org.opengis.coverage.grid.Format;
import org.opengis.coverage.grid.GridCoverageReader;

/**
* This class can read a MrSID data source and create a {@link GridCoverage2D}
* from the data.
*
* @author Daniele Romagnoli, GeoSolutions
* @author Simone Giannecchini (simboss), GeoSolutions
* @since 2.5.x
*
*
* @source $URL$
*/
public final class MrSIDReader extends BaseGDALGridCoverage2DReader implements
        GridCoverageReader {
    /** Logger. */
    @SuppressWarnings("unused")
    private final static Logger LOGGER = org.geotools.util.logging.Logging
            .getLogger(MrSIDReader.class);

    private final static String worldFileExt = ".sdw";

    /**
     * Creates a new instance of a {@link MrSIDReader}. I assume nothing about
     * file extension.
     *
     * @param input
     *                Source object for which we want to build a
     *                {@link MrSIDReader}.
     * @throws DataSourceException
     */
    public MrSIDReader(Object input) throws DataSourceException {
        this(input, null);
    }

    /**
     * Creates a new instance of a {@link MrSIDReader}. I assume nothing about
     * file extension.
     *
     * @param input
     *                Source object for which we want to build a
     *                {@link MrSIDReader}.
     * @param hints
     *                Hints to be used by this reader throughout his life.
     * @throws DataSourceException
     */
    public MrSIDReader(Object input, final Hints hints)
            throws DataSourceException {
        super(input, hints, worldFileExt, new MrSIDImageReaderSpi());
    }

    /**
     * Setting Envelope, GridRange and CRS from the given {@code ImageReader}
     *
     * @param reader
     *                the {@code ImageReader} from which to retrieve metadata
     *                (if available) for setting properties
     * @throws IOException
     */
    @Override
    protected void setCoverageProperties(ImageReader reader) throws IOException {

        // //
        //
        // Due to a MrSID encoder (old version) bug , georeferencing information
        // could be wrong. Hence we first attempt to get information using
        // alternative ways (worldfile, common metadata) and then try setting
        // empty fields with specific metadata.
        //
        // //
        super.setCoverageProperties(reader);

        if (this.originalGridRange != null &&this.crs != null
                && originalEnvelope != null)
            return;
       
        // Uncomment this section in case we stop using the default CRS.
        // The CRS information coming from GDAL are computed from the
        // same MrSID metadata.
       
//    final IIOMetadata metadata = reader.getImageMetadata(0);
//    if (!(metadata instanceof GDALCommonIIOImageMetadata)) {
//        throw new DataSourceException(
//                "Unexpected error! Metadata should be an instance of the expected class:"
//                        + " GDALCommonIIOImageMetadata.");
//    }
//    final GDALCommonIIOImageMetadata gridMetadata = (GDALCommonIIOImageMetadata) metadata;
//
//    // getting metadata
//    final Node root = gridMetadata
//            .getAsTree(MrSIDIIOImageMetadata.mrsidImageMetadataName);
//
//    // //
//    //
//    // getting Image Properties
//    //
//    // //
//    Node child = root.getFirstChild();
//    NamedNodeMap attributes = child.getAttributes();
//    if (getCoverageGridRange() == null) {
//        final String sWidth = attributes.getNamedItem("IMAGE__WIDTH")
//                .getNodeValue();
//        final String sHeight = attributes.getNamedItem("IMAGE__HEIGHT")
//                .getNodeValue();
//
//        if ((sHeight != null) && (sWidth != null)
//                && !(sWidth.trim().equalsIgnoreCase(""))
//                && !(sHeight.trim().equalsIgnoreCase(""))) {
//            final int width = Integer.parseInt(sWidth);
//            final int height = Integer.parseInt(sHeight);
//            setCoverageGridRange(new GeneralGridRange(new Rectangle(0, 0,
//                    width, height)));
//        }
//    }
//    // //
//    //
//    // getting GeoReferencing Properties
//    //
//    // //
//    child = child.getNextSibling();
//    attributes = child.getAttributes();
//
//    if (getCoverageEnvelope() == null) {
//        final String xResolution = attributes.getNamedItem(
//                "IMAGE__X_RESOLUTION").getNodeValue();
//        final String yResolution = attributes.getNamedItem(
//                "IMAGE__Y_RESOLUTION").getNodeValue();
//        final String xyOrigin = attributes.getNamedItem("IMAGE__XY_ORIGIN")
//                .getNodeValue();
//
//        if ((xResolution != null) && (yResolution != null)
//                && (xyOrigin != null)
//                && !(xResolution.trim().equalsIgnoreCase(""))
//                && !(yResolution.trim().equalsIgnoreCase(""))
//                && !(xyOrigin.trim().equalsIgnoreCase(""))) {
//            double cellsizeX = Double.parseDouble(xResolution);
//            double cellsizeY = Double.parseDouble(yResolution);
//            final String[] origins = xyOrigin.split(",");
//            double xul = Double.parseDouble(origins[0]);
//            double yul = Double.parseDouble(origins[1]);
//
//            xul -= (cellsizeX / 2d);
//            yul -= (cellsizeY / 2d);
//
//            final double xll = xul;
//            final double yur = yul;
//            final int width = getCoverageGridRange().getLength(0);
//            final int height = getCoverageGridRange().getLength(1);
//            final double xur = xul + (cellsizeX * width);
//            final double yll = yul - (cellsizeY * height);
//            setCoverageEnvelope(new GeneralEnvelope(
//                    new double[] { xll, yll }, new double[] { xur, yur }));
//        }
//    }
//    // Retrieving projection Information
//    if (getCoverageCRS() == null) {
//        Node attribute = attributes.getNamedItem("IMG__WKT");
//
//        if (attribute != null) {
//            String wkt = attribute.getNodeValue();
//
//            if ((wkt != null) && (wkt.trim().length() > 0)) {
//                try {
//                    setCoverageCRS(CRS.parseWKT(wkt));
//                } catch (FactoryException fe) {
//                    if (LOGGER.isLoggable(Level.FINE)) {
//                        LOGGER.log(Level.FINE, "Unable to get CRS from"
//                                + " WKT contained in metadata."
//                                + " Looking for a PRJ.");
//                    }
//
//                    // unable to get CRS from WKT
//                    setCoverageCRS(null);
//                }
//            }
//        }
//    }
    }

    /**
     * @see org.opengis.coverage.grid.GridCoverageReader#getFormat()
     */
    public Format getFormat() {
        return new MrSIDFormat();
    }
}
TOP

Related Classes of org.geotools.coverageio.gdal.mrsid.MrSIDReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.