19 #ifndef GEOS_ALGORITHM_DISTANCE_DISCRETEHAUSDORFFDISTANCE_H
20 #define GEOS_ALGORITHM_DISTANCE_DISCRETEHAUSDORFFDISTANCE_H
22 #include <geos/export.h>
23 #include <geos/algorithm/distance/PointPairDistance.h>
24 #include <geos/algorithm/distance/DistanceToPoint.h>
25 #include <geos/util/IllegalArgumentException.h>
26 #include <geos/geom/Geometry.h>
27 #include <geos/util/math.h>
28 #include <geos/geom/CoordinateFilter.h>
29 #include <geos/geom/CoordinateSequenceFilter.h>
36 #pragma warning(disable: 4251)
49 namespace intervalrtree {
132 return ptDist.getDistance();
138 computeOrientedDistance(g0, g1, ptDist);
139 return ptDist.getDistance();
142 const std::array<geom::Coordinate, 2>
143 getCoordinates()
const
145 return ptDist.getCoordinates();
156 filter_ro(
const geom::Coordinate* pt)
override
158 minPtDist.initialize();
159 DistanceToPoint::computeDistance(geom, *pt,
161 maxPtDist.setMaximum(minPtDist);
164 const PointPairDistance&
165 getMaxPointDistance()
const
171 PointPairDistance maxPtDist;
172 PointPairDistance minPtDist;
173 DistanceToPoint euclideanDist;
174 const geom::Geometry& geom;
177 MaxPointDistanceFilter(
const MaxPointDistanceFilter& other);
178 MaxPointDistanceFilter& operator=(
const MaxPointDistanceFilter& rhs);
181 class MaxDensifiedByFractionDistanceFilter
182 :
public geom::CoordinateSequenceFilter {
185 MaxDensifiedByFractionDistanceFilter(
186 const geom::Geometry& p_geom,
double fraction)
190 numSubSegs(std::size_t(util::
round(1.0 / fraction)))
194 void filter_ro(
const geom::CoordinateSequence& seq,
195 std::size_t index)
override;
198 isGeometryChanged()
const override
204 isDone()
const override
209 const PointPairDistance&
210 getMaxPointDistance()
const
216 PointPairDistance maxPtDist;
217 PointPairDistance minPtDist;
218 const geom::Geometry& geom;
219 std::size_t numSubSegs;
222 MaxDensifiedByFractionDistanceFilter(
const MaxDensifiedByFractionDistanceFilter& other);
223 MaxDensifiedByFractionDistanceFilter& operator=(
const MaxDensifiedByFractionDistanceFilter& rhs);
229 compute(
const geom::Geometry& p_g0,
230 const geom::Geometry& p_g1)
232 computeOrientedDistance(p_g0, p_g1, ptDist);
233 computeOrientedDistance(p_g1, p_g0, ptDist);
236 void computeOrientedDistance(
const geom::Geometry& discreteGeom,
237 const geom::Geometry& geom,
238 PointPairDistance& ptDist);
240 const geom::Geometry& g0;
242 const geom::Geometry& g1;
244 PointPairDistance ptDist;
250 DiscreteHausdorffDistance(
const DiscreteHausdorffDistance& other) =
delete;
251 DiscreteHausdorffDistance& operator=(
const DiscreteHausdorffDistance& rhs) =
delete;
An algorithm for computing a distance metric which is an approximation to the Hausdorff Distance base...
Definition: DiscreteHausdorffDistance.h:100
void setDensifyFraction(double dFrac)
Geometry classes support the concept of applying a coordinate filter to every coordinate in the Geome...
Definition: CoordinateFilter.h:43
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:188
double round(double val)
Definition: math.h:36
Basic namespace for all GEOS functionalities.
Definition: Angle.h:26