コード例 #1
0
        public static IGeometry discreteOrientedHausdorffDistanceLine(IGeometry a, IGeometry b)
        {
            var dist = new DiscreteHausdorffDistance(a, b);

            dist.OrientedDistance();
            return(a.Factory.CreateLineString(dist.Coordinates));
        }
コード例 #2
0
        /// <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]) + ")";
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        public static double discreteOrientedHausdorffDistance(IGeometry a, IGeometry b)
        {
            var dist = new DiscreteHausdorffDistance(a, b);

            return(dist.OrientedDistance());
        }