Search in sources :

Example 1 with DiscreteHausdorffDistance

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]) + ")";
    }
}
Also used : DiscreteHausdorffDistance(com.revolsys.geometry.algorithm.distance.DiscreteHausdorffDistance) Point(com.revolsys.geometry.model.Point)

Example 2 with DiscreteHausdorffDistance

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());
}
Also used : DiscreteHausdorffDistance(com.revolsys.geometry.algorithm.distance.DiscreteHausdorffDistance)

Example 3 with DiscreteHausdorffDistance

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;
}
Also used : Geometry(com.revolsys.geometry.model.Geometry) DiscreteHausdorffDistance(com.revolsys.geometry.algorithm.distance.DiscreteHausdorffDistance)

Example 4 with DiscreteHausdorffDistance

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());
}
Also used : DiscreteHausdorffDistance(com.revolsys.geometry.algorithm.distance.DiscreteHausdorffDistance)

Example 5 with DiscreteHausdorffDistance

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());
}
Also used : DiscreteHausdorffDistance(com.revolsys.geometry.algorithm.distance.DiscreteHausdorffDistance)

Aggregations

DiscreteHausdorffDistance (com.revolsys.geometry.algorithm.distance.DiscreteHausdorffDistance)5 Geometry (com.revolsys.geometry.model.Geometry)1 Point (com.revolsys.geometry.model.Point)1