org.opengis.coverage.InterpolationMethod Maven / Gradle / Ivy
Show all versions of gt-opengis Show documentation
/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2011, Open Source Geospatial Foundation (OSGeo)
* (C) 2005 Open Geospatial Consortium Inc.
*
* All Rights Reserved. http://www.opengis.org/legal/
*/
package org.opengis.coverage;
import static org.opengis.annotation.Obligation.*;
import static org.opengis.annotation.Specification.*;
import java.util.ArrayList;
import java.util.List;
import org.opengis.annotation.UML;
import org.opengis.util.CodeList;
/**
* A list of codes that identify interpolation methods that may be used for evaluating {@linkplain
* ContinuousCoverage continuous coverages}. Evaluation of a continuous coverage involves
* interpolation between known feature attribute values associated with geometric objects in the
* domain of the {@linkplain DiscreteCoverage discrete coverage} that is provided as control for the
* continuous coverage. This code list includes 9 interpolation methods. Each is used in the context
* of specified geometric configurations (table below). Since {@code InterpolationMethod} is a
* {@code CodeList}, it may be extended in an application schema that specifies additional
* interpolation methods.
*
*
*
*
* Method Coverage Type Value object dimension
* Nearest Neighbour Any Any
* Linear Segmented Curve 1
* Quadratic Segmented Curve 1
* Cubic Segmented Curve 1
* Bilinear Quadrilateral Grid 2
* Biquadratic Quadrilateral Grid 2
* Bicubic Quadrilateral Grid 2
* Lost Area Thiessen Polygon, Hexagonal Grid 2
* Barycentric TIN 2
*
*
* @version ISO 19123:2004
* @author Martin Desruisseaux (IRD)
* @since GeoAPI 2.1
*/
@UML(identifier = "CV_InterpolationMethod", specification = ISO_19123)
public class InterpolationMethod extends CodeList {
/** Serial number for compatibility with different versions. */
private static final long serialVersionUID = -4289541167757079847L;
/** List of all enumerations of this type. Must be declared before any enum declaration. */
private static final List VALUES = new ArrayList(9);
/**
* Generates a feature attribute value at a direct position by assigning it the feature
* attribute value associated with the nearest domain object in the domain of the coverage.
* Nearest neighbour interpolation extends a discrete coverage to a step function defined on the
* convex hull of the domain objects in the domain of the coverage. Nearest neighbour
* interpolation is the only interpolation method described in ISO 19123 that can be used to
* interpolate attributes that have nominal or ordinal values.
*
* NOTE: In the case of a discrete point coverage, the "steps" of the step function
* are the Thiessen polygons generated by the set of points in the domain of the coverage.
*/
@UML(identifier = "Nearest neighbour", obligation = CONDITIONAL, specification = ISO_19123)
public static final InterpolationMethod NEAREST_NEIGHBOUR =
new InterpolationMethod("NEAREST_NEIGHBOUR");
/**
* Interpolation based on the assumption that feature attribute values vary in proportion to
* distance along a value segment.
*
*
*
*
*
* v = a + bx
*
*
*
* Linear interpolation may be used to interpolate feature attribute values along a line
* segment connecting any two point value pairs. It may also be used to interpolate feature
* attribute values at positions along a curve of any form, if the positions are described by
* values of an arc-length parameter.
*
*
Given two point value pairs (ps, vs) and
* (pt, vt), where ps is the
* start point and pt is the end point of a value segment, and
* vs and vt are the feature attribute values
* associated with those points, the feature attribute value vi associated
* with the direct position pi is:
*
*
*
*
*
* vi = vs + (vt -
* vs) ((pi -
* ps)/(pt - ps))
*
*
*/
@UML(identifier = "Linear interpolation", obligation = CONDITIONAL, specification = ISO_19123)
public static final InterpolationMethod LINEAR = new InterpolationMethod("LINEAR");
/**
* Interpolation based on the assumption that feature attribute values vary as a quadratic
* function of distance along a value segment.
*
*
*
*
*
* v = a + bx + cx2
*
*
*
* where a is the value of a feature attribute at the start of a value segment and
* v is the value of a feature attribute at distance x along the curve
* from the start. Three point value pairs are needed to provide control values for calculating
* the coefficients of the function.
*/
@UML(
identifier = "Quadratic interpolation",
obligation = CONDITIONAL,
specification = ISO_19123
)
public static final InterpolationMethod QUADRATIC = new InterpolationMethod("QUADRATIC");
/**
* Interpolation based on the assumption that feature attribute values vary as a cubic function
* of distance along a value segment.
*
*
*
*
*
* v = a + bx + cx2
* + dx3
*
*
*
* where a is the value of a feature attribute at the start of a value segment and
* v is the value of a feature attribute at distance x along the curve
* from the start. Four point value pairs are needed to provide control values for calculating
* the coefficients of the function.
*/
@UML(identifier = "Cubic interpolation", obligation = CONDITIONAL, specification = ISO_19123)
public static final InterpolationMethod CUBIC = new InterpolationMethod("CUBIC");
/**
* Interpolation based on the assumption that feature attribute values vary as a bilinear
* function of position within the grid cell.
*/
@UML(identifier = "Bilinear interpolation", obligation = CONDITIONAL, specification = ISO_19123)
public static final InterpolationMethod BILINEAR = new InterpolationMethod("BILINEAR");
/**
* Interpolation based on the assumption that feature attribute values vary as a biquadratic
* function of position within the grid cell.
*/
@UML(
identifier = "Biquadratic interpolation",
obligation = CONDITIONAL,
specification = ISO_19123
)
public static final InterpolationMethod BIQUADRATIC = new InterpolationMethod("BIQUADRATIC");
/**
* Interpolation based on the assumption that feature attribute values vary as a bicubic
* function of position within the grid cell.
*/
@UML(identifier = "Bicubic interpolation", obligation = CONDITIONAL, specification = ISO_19123)
public static final InterpolationMethod BICUBIC = new InterpolationMethod("BICUBIC");
/** Lost area interpolation. */
@UML(
identifier = "Lost area interpolation",
obligation = CONDITIONAL,
specification = ISO_19123
)
public static final InterpolationMethod LOST_AREA = new InterpolationMethod("LOST_AREA");
/** Barycentric interpolation. */
@UML(
identifier = "Barycentric interpolation",
obligation = CONDITIONAL,
specification = ISO_19123
)
public static final InterpolationMethod BARYCENTRIC = new InterpolationMethod("BARYCENTRIC");
/**
* Constructs an enum with the given name. The new enum is automatically added to the list
* returned by {@link #values}.
*
* @param name The enum name. This name must not be in use by an other enum of this type.
*/
private InterpolationMethod(final String name) {
super(name, VALUES);
}
/**
* Returns the list of {@code InterpolationMethod}s.
*
* @return The list of codes declared in the current JVM.
*/
public static InterpolationMethod[] values() {
synchronized (VALUES) {
return VALUES.toArray(new InterpolationMethod[VALUES.size()]);
}
}
/** Returns the list of enumerations of the same kind than this enum. */
public InterpolationMethod[] family() {
return values();
}
/**
* Returns the interpolation method that matches the given string, or returns a new one if none
* match it.
*
* @param code The name of the code to fetch or to create.
* @return A code matching the given name.
*/
public static InterpolationMethod valueOf(String code) {
return valueOf(InterpolationMethod.class, code);
}
}