simplifyPath static method

List<LatLng> simplifyPath(
  1. List<LatLng> points,
  2. double tolerance
)

Implementation

static List<LatLng> simplifyPath(List<LatLng> points, double tolerance) {
  if (points.length < 3) return points;

  int index = -1;
  double maxDistance = 0.0;

  for (int i = 1; i < points.length - 1; i++) {
    double distance = perpendicularDistance(points[i], points.first, points.last);

    if (distance > maxDistance) {
      maxDistance = distance;
      index = i;
    }
  }

  if (maxDistance > tolerance) {
    List<LatLng> leftPath = simplifyPath(points.sublist(0, index + 1), tolerance);
    List<LatLng> rightPath = simplifyPath(points.sublist(index), tolerance);

    List<LatLng> finalPath = leftPath.sublist(0, leftPath.length - 1);
    finalPath.addAll(rightPath);

    return finalPath;
  } else {
    return [points.first, points.last];
  }
}