All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opengis.coverage.InterpolationMethod Maven / Gradle / Ivy

There is a newer version: 24.2-oss84-1
Show newest version
/*
 *    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 NeighbourAny 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 Grid2
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); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy