use of com.revolsys.geometry.algorithm.distance.DiscreteHausdorffDistance in project com.revolsys.open by revolsys.
the class BufferDistanceValidator method checkMaximumDistance.
/**
* Checks that the furthest distance from the buffer curve to the input
* is less than the given maximum distance.
* This uses the Oriented Hausdorff distance metric.
* It corresponds to finding
* the point on the buffer curve which is furthest from <i>some</i> point on the input.
*
* @param input a geometry
* @param bufCurve a geometry
* @param maxDist the maximum distance that a buffer result can be from the input
*/
private void checkMaximumDistance(final Geometry input, final Geometry bufCurve, final double maxDist) {
// BufferCurveMaximumDistanceFinder maxDistFinder = new
// BufferCurveMaximumDistanceFinder(input);
// maxDistanceFound = maxDistFinder.findDistance(bufCurve);
final DiscreteHausdorffDistance haus = new DiscreteHausdorffDistance(bufCurve, input);
haus.setDensifyFraction(0.25);
this.maxDistanceFound = haus.orientedDistance();
if (this.maxDistanceFound > maxDist) {
this.isValid = false;
final Point[] pts = haus.getCoordinates();
this.errorLocation = pts[1];
this.errorIndicator = input.getGeometryFactory().lineString(pts);
this.errMsg = "Distance between buffer curve and input is too large " + "(" + this.maxDistanceFound + " at " + EWktWriter.lineString(pts[0], pts[1]) + ")";
}
}
use of com.revolsys.geometry.algorithm.distance.DiscreteHausdorffDistance in project com.revolsys.open by revolsys.
the class DistanceFunctions method densifiedDiscreteHausdorffDistanceLine.
public static Geometry densifiedDiscreteHausdorffDistanceLine(final Geometry a, final Geometry b, final double frac) {
final DiscreteHausdorffDistance hausDist = new DiscreteHausdorffDistance(a, b);
hausDist.setDensifyFraction(frac);
hausDist.distance();
return a.getGeometryFactory().lineString(hausDist.getCoordinates());
}
use of com.revolsys.geometry.algorithm.distance.DiscreteHausdorffDistance in project com.revolsys.open by revolsys.
the class BufferResultMatcher method isBoundaryHausdorffDistanceInTolerance.
public boolean isBoundaryHausdorffDistanceInTolerance(final Geometry actualBuffer, final Geometry expectedBuffer, final double distance) {
final Geometry actualBdy = actualBuffer.getBoundary();
final Geometry expectedBdy = expectedBuffer.getBoundary();
final DiscreteHausdorffDistance haus = new DiscreteHausdorffDistance(actualBdy, expectedBdy);
haus.setDensifyFraction(0.25);
final double maxDistanceFound = haus.orientedDistance();
double expectedDistanceTol = Math.abs(distance) / MAX_HAUSDORFF_DISTANCE_FACTOR;
if (expectedDistanceTol < MIN_DISTANCE_TOLERANCE) {
expectedDistanceTol = MIN_DISTANCE_TOLERANCE;
}
if (maxDistanceFound > expectedDistanceTol) {
return false;
}
return true;
}
use of com.revolsys.geometry.algorithm.distance.DiscreteHausdorffDistance in project com.revolsys.open by revolsys.
the class DistanceFunctions method discreteHausdorffDistanceLine.
public static Geometry discreteHausdorffDistanceLine(final Geometry a, final Geometry b) {
final DiscreteHausdorffDistance dist = new DiscreteHausdorffDistance(a, b);
dist.distance();
return a.getGeometryFactory().lineString(dist.getCoordinates());
}
use of com.revolsys.geometry.algorithm.distance.DiscreteHausdorffDistance in project com.revolsys.open by revolsys.
the class DistanceFunctions method discreteOrientedHausdorffDistanceLine.
public static Geometry discreteOrientedHausdorffDistanceLine(final Geometry a, final Geometry b) {
final DiscreteHausdorffDistance dist = new DiscreteHausdorffDistance(a, b);
dist.orientedDistance();
return a.getGeometryFactory().lineString(dist.getCoordinates());
}
Aggregations