public static IGeometry discreteOrientedHausdorffDistanceLine(IGeometry a, IGeometry b) { var dist = new DiscreteHausdorffDistance(a, b); dist.OrientedDistance(); return(a.Factory.CreateLineString(dist.Coordinates)); }
/// <summary> /// Checks that the furthest distance from the buffer curve to the input /// is less than the given maximum distance. /// </summary> /// <remarks> /// 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. /// </remarks> /// <param name="input">A geometry</param> /// <param name="bufCurve">A geometry</param> /// <param name="maxDist">The maximum distance that a buffer result can be from the input</param> private void CheckMaximumDistance(Geometry input, Geometry bufCurve, double maxDist) { // BufferCurveMaximumDistanceFinder maxDistFinder = new BufferCurveMaximumDistanceFinder(input); // maxDistanceFound = maxDistFinder.findDistance(bufCurve); var haus = new DiscreteHausdorffDistance(bufCurve, input); haus.DensifyFraction = 0.25; _maxDistanceFound = haus.OrientedDistance(); if (_maxDistanceFound > maxDist) { _isValid = false; var pts = haus.Coordinates; _errorLocation = pts[1]; _errorIndicator = input.Factory.CreateLineString(pts); _errMsg = "Distance between buffer curve and input is too large " + "(" + _maxDistanceFound + " at " + WKTWriter.ToLineString(pts[0], pts[1]) + ")"; } }
public bool IsBoundaryHausdorffDistanceInTolerance(Geometry actualBuffer, Geometry expectedBuffer, double distance) { var actualBdy = actualBuffer.Boundary; var expectedBdy = expectedBuffer.Boundary; var haus = new DiscreteHausdorffDistance(actualBdy, expectedBdy) { DensifyFraction = 0.25 }; double maxDistanceFound = haus.OrientedDistance(); double expectedDistanceTol = Math.Abs(distance) / MaxHausdorffDistanceFactor; if (expectedDistanceTol < MinDistanceTolerance) { expectedDistanceTol = MinDistanceTolerance; } if (maxDistanceFound > expectedDistanceTol) { return(false); } return(true); }
public static double discreteOrientedHausdorffDistance(IGeometry a, IGeometry b) { var dist = new DiscreteHausdorffDistance(a, b); return(dist.OrientedDistance()); }