Class InterpolationLibrary


  • public class InterpolationLibrary
    extends Object
    Generic methods to support interpolation of values against a sorted key-value map given a new target key. Note that these interpolation methods do not conform to the GTFS-rt spec. For GTFS-rt compliant interpolation/extrapolation. Ported from onebusaway-application-modules.
    Author:
    bdferris
    • Constructor Detail

      • InterpolationLibrary

        public InterpolationLibrary()
    • Method Detail

      • interpolate

        public static <K extends Number,​V extends Number> double interpolate​(SortedMap<K,​V> values,
                                                                                   K target,
                                                                                   InterpolationLibrary.EOutOfRangeStrategy outOfRangeStrategy)
        Given a SortedMap with key-values that all extend from Number, interpolate using linear interpolation a value for a target key within the key-range of the map. For a key outside the range of the keys of the map, the outOfRange InterpolationLibrary.EOutOfRangeStrategy strategy will determine the interpolation behavior.
        Parameters:
        values - a sorted-map of key-value number pairs
        target - the target key used to interpolate a value
        outOfRangeStrategy - the strategy to use for a target key that outside the key-range of the value map
        Returns:
        an interpolated value for the target key
      • interpolatePair

        public static double interpolatePair​(double fromValue,
                                             double toValue,
                                             double ratio)
        Simple numeric interpolation between two double values using the equation ratio * (toValue - fromValue) + fromValue
        Parameters:
        fromValue -
        toValue -
        ratio -
        Returns:
        ratio * (toValue - fromValue) + fromValue
      • interpolatePair

        public static double interpolatePair​(double keyA,
                                             double valueA,
                                             double keyB,
                                             double valueB,
                                             double targetKey)
        Simple numeric interpolation between two pairs of key-values and a third key. Here, ratio = (targetKey - keyA) / (keyB - keyA) and the result is ratio * (valueB - valueA) + valueA.
        Returns:
        ratio * (toValue - fromValue) + fromValue
      • interpolate

        public static <KEY extends Number,​VALUE,​ANY_KEY extends KEY,​ANY_VALUE extends VALUE> VALUE interpolate​(InterpolationLibrary.InterpolationStrategy<KEY,​VALUE> interpolationStrategy,
                                                                                                                                 InterpolationLibrary.EOutOfRangeStrategy outOfRangeStrategy,
                                                                                                                                 SortedMap<ANY_KEY,​ANY_VALUE> values,
                                                                                                                                 ANY_KEY target)
        Given a SortedMap with key-values that of arbitrary type and a InterpolationLibrary.InterpolationStrategy to define interpolation over those types, interpolate a value for a target key within the key-range of the map. For a key outside the range of the keys of the map, the outOfRange InterpolationLibrary.EOutOfRangeStrategy strategy will determine the interpolation behavior.
        Parameters:
        interpolationStrategy - the interpolation strategy used to perform interpolation between key-value pairs of arbitrary type
        outOfRangeStrategy - the strategy to use for a target key that outside the key-range of the value map
        values - a sorted-map of key-value pairs
        target - the target key used to interpolate a value
        Returns:
        an interpolated value for the target key