001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2006, Geotools Project Managment Committee (PMC)
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or (at your option) any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: */
016: package org.geotools.coverage.processing.operation;
017:
018: import javax.media.jai.BorderExtender;
019: import javax.media.jai.BorderExtenderCopy;
020: import javax.media.jai.Interpolation;
021: import javax.media.jai.InterpolationNearest;
022:
023: import org.geotools.coverage.processing.Operation2D;
024: import org.geotools.factory.Hints;
025: import org.geotools.metadata.iso.citation.Citations;
026: import org.geotools.parameter.DefaultParameterDescriptor;
027: import org.geotools.parameter.DefaultParameterDescriptorGroup;
028: import org.opengis.coverage.Coverage;
029: import org.opengis.parameter.ParameterDescriptor;
030: import org.opengis.parameter.ParameterValueGroup;
031:
032: /**
033: * TODO: Need documentation
034: *
035: * @todo Consider refactoring as a {@code OperationJAI} subclass. We could get ride of the
036: * {@code FilteredSubsampledGridCoverage2D} class. The main feature to add is the
037: * copy of interpolation and border extender parameters to the hints.
038: *
039: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/library/coverage/src/main/java/org/geotools/coverage/processing/operation/FilteredSubsample.java $
040: * @version $Id: FilteredSubsample.java 23211 2006-12-05 00:38:41Z desruisseaux $
041: * @author Simone Giannecchini
042: * @since 2.3
043: *
044: * @see javax.media.jai.operator.FilteredSubsampleDescriptor
045: */
046: public class FilteredSubsample extends Operation2D {
047: /**
048: * Serial number for cross-version compatibility.
049: */
050: private static final long serialVersionUID = 652535074064952517L;
051:
052: /**
053: *
054: */
055: public static final ParameterDescriptor scaleX = new DefaultParameterDescriptor(
056: Citations.GEOTOOLS, "scaleX", Integer.class, // Value class
057: // (mandatory)
058: null, // Array of valid values
059: new Integer(2), // Default value
060: null, // Minimal value
061: null, // Maximal value
062: null, // Unit of measure
063: true); // Parameter is optional
064:
065: /**
066: *
067: */
068: public static final ParameterDescriptor scaleY = new DefaultParameterDescriptor(
069: Citations.GEOTOOLS, "scaleY", Integer.class, // Value class
070: // (mandatory)
071: null, // Array of valid values
072: new Integer(2), // Default value
073: null, // Minimal value
074: null, // Maximal value
075: null, // Unit of measure
076: true); // Parameter is optional
077:
078: /**
079: *
080: */
081: public static final ParameterDescriptor qsFilter = new DefaultParameterDescriptor(
082: Citations.GEOTOOLS, "qsFilterArray", float[].class, // Value class
083: // (mandatory)
084: null, // Array of valid values
085: new float[] { 1 }, // Default value
086: null, // Minimal value
087: null, // Maximal value
088: null, // Unit of measure
089: true); // Parameter is optional
090:
091: /**
092: *
093: */
094: public static final ParameterDescriptor Interpolation = new DefaultParameterDescriptor(
095: Citations.GEOTOOLS, "Interpolation", Interpolation.class, // Value class (mandatory)
096: null, // Array of valid values
097: new InterpolationNearest(), // Default value
098: null, // Minimal value
099: null, // Maximal value
100: null, // Unit of measure
101: true); // Parameter is optional
102:
103: /**
104: *
105: */
106: public static final ParameterDescriptor BorderExtender = new DefaultParameterDescriptor(
107: Citations.GEOTOOLS, "BorderExtender", BorderExtender.class, // Value class (mandatory)
108: null, // Array of valid values
109: BorderExtenderCopy
110: .createInstance(BorderExtenderCopy.BORDER_COPY), // Default value
111: null, // Minimal value
112: null, // Maximal value
113: null, // Unit of measure
114: true); // Parameter is optional
115:
116: /**
117: *
118: */
119: public FilteredSubsample() {
120: super (new DefaultParameterDescriptorGroup(Citations.GEOTOOLS,
121: "FilteredSubsample", new ParameterDescriptor[] {
122: SOURCE_0, scaleX, scaleY, qsFilter,
123: Interpolation, BorderExtender }));
124: }
125:
126: /* (non-Javadoc)
127: * @see org.geotools.coverage.processing.AbstractOperation#doOperation(org.opengis.parameter.ParameterValueGroup, org.geotools.factory.Hints)
128: */
129: public Coverage doOperation(ParameterValueGroup parameters,
130: Hints hints) {
131: return FilteredSubsampledGridCoverage2D.create(parameters,
132: (hints instanceof Hints) ? (Hints) hints : new Hints(
133: hints));
134: }
135: }
|