computeMinDistanceLineLineList method

void computeMinDistanceLineLineList(
  1. LineString line0,
  2. LineString line1,
  3. List<GeometryLocation?> locGeom
)

Implementation

void computeMinDistanceLineLineList(
    LineString line0, LineString line1, List<GeometryLocation?> locGeom) {
  if (line0.getEnvelopeInternal().distance(line1.getEnvelopeInternal()) >
      minDistance) return;
  List<Coordinate> coord0 = line0.getCoordinates();
  List<Coordinate> coord1 = line1.getCoordinates();
  // brute force approach!
  for (int i = 0; i < coord0.length - 1; i++) {
    for (int j = 0; j < coord1.length - 1; j++) {
      double dist = Distance.segmentToSegment(
          coord0[i], coord0[i + 1], coord1[j], coord1[j + 1]);
      if (dist < minDistance) {
        minDistance = dist;
        LineSegment seg0 =
            new LineSegment.fromCoordinates(coord0[i], coord0[i + 1]);
        LineSegment seg1 =
            new LineSegment.fromCoordinates(coord1[j], coord1[j + 1]);
        List<Coordinate> closestPt = seg0.closestPoints(seg1);
        locGeom[0] = new GeometryLocation(line0, i, closestPt[0]);
        locGeom[1] = new GeometryLocation(line1, j, closestPt[1]);
      }
      if (minDistance <= terminateDistance) return;
    }
  }
}