pointToLineDistance function

num pointToLineDistance(
  1. Point point,
  2. LineString line, {
  3. Unit unit = Unit.kilometers,
  4. DistanceGeometry method = DistanceGeometry.geodesic,
})

Returns the minimum distance between a point and a line, being the distance from a line the minimum distance between the point and any segment of the LineString.

Example:

final point = Point(coordinates: Position(0, 0));
final line = LineString(coordinates: [Position(1, 1), Position(-1, 1)]);

final distance = pointToLineDistance(point, line, unit: Unit.miles);
// distance == 69.11854715938406

Implementation

num pointToLineDistance(
  Point point,
  LineString line, {
  Unit unit = Unit.kilometers,
  DistanceGeometry method = DistanceGeometry.geodesic,
}) {
  var distance = double.infinity;
  final position = point.coordinates;

  segmentEach(line, (segment, _, __, ___, ____) {
    final a = segment.geometry!.coordinates[0];
    final b = segment.geometry!.coordinates[1];
    final d = _distanceToSegment(position, a, b, method: method);

    if (d < distance) {
      distance = d.toDouble();
    }
  });

  return convertLength(distance, Unit.degrees, unit);
}