interpolate2 static method

List<double> interpolate2(
  1. LineString line,
  2. double startValue,
  3. double midValue,
  4. double endValue,
)

Implementation

static List<double> interpolate2(
    LineString line, double startValue, double midValue, double endValue) {
  startValue = startValue.abs();
  midValue = midValue.abs();
  endValue = endValue.abs();
  List<double> values = List.filled(line.getNumPoints(), 0);
  values[0] = startValue;
  values[values.length - 1] = endValue;
  List<Coordinate> pts = line.getCoordinates();
  double lineLen = line.getLength();
  int midIndex = indexAtLength(pts, lineLen / 2);
  double delMidStart = midValue - startValue;
  double delEndMid = endValue - midValue;
  double lenSM = length(pts, 0, midIndex);
  double currLen = 0;
  for (int i = 1; i <= midIndex; i++) {
    double segLen = pts[i].distance(pts[i - 1]);
    currLen += segLen;
    double lenFrac = currLen / lenSM;
    double val = startValue + (lenFrac * delMidStart);
    values[i] = val;
  }
  double lenME = length(pts, midIndex, pts.length - 1);
  currLen = 0;
  for (int i = midIndex + 1; i < (values.length - 1); i++) {
    double segLen = pts[i].distance(pts[i - 1]);
    currLen += segLen;
    double lenFrac = currLen / lenME;
    double val = midValue + (lenFrac * delEndMid);
    values[i] = val;
  }
  return values;
}