package com.revolsys.geometry.filter; import java.util.function.Predicate; import com.revolsys.geometry.model.BoundingBox; import com.revolsys.geometry.model.Geometry; import com.revolsys.geometry.model.IntersectionMatrix; import com.revolsys.geometry.model.LineString; public class LinearIntersectionFilter implements Predicate<LineString> { private final BoundingBox envelope; private final LineString line; private final Geometry preparedLine; public LinearIntersectionFilter(final LineString line) { this.line = line; this.preparedLine = line.prepare(); this.envelope = line.getBoundingBox(); } @Override public boolean test(final LineString line) { final BoundingBox envelope = line.getBoundingBox(); if (envelope.intersects(this.envelope)) { if (this.preparedLine.intersects(line)) { final IntersectionMatrix relate = this.line.relate(line); if (relate.isOverlaps(1, 1) || relate.isContains() || relate.isWithin()) { return true; } } } return false; } }