20 #ifndef GEOS_ALGORITHM_DISTANCE_DISCRETEHAUSDORFFDISTANCE_H
21 #define GEOS_ALGORITHM_DISTANCE_DISCRETEHAUSDORFFDISTANCE_H
23 #include <geos/export.h>
24 #include <geos/algorithm/distance/PointPairDistance.h>
25 #include <geos/algorithm/distance/DistanceToPoint.h>
26 #include <geos/util/IllegalArgumentException.h>
27 #include <geos/geom/Geometry.h>
28 #include <geos/util/math.h>
29 #include <geos/geom/CoordinateFilter.h>
30 #include <geos/geom/CoordinateSequenceFilter.h>
37 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
50 namespace intervalrtree {
128 void setDensifyFraction(
double dFrac)
130 if ( dFrac > 1.0 || dFrac <= 0.0 )
133 "Fraction is not in range (0.0 - 1.0]");
142 return ptDist.getDistance();
145 double orientedDistance()
147 computeOrientedDistance(g0, g1, ptDist);
148 return ptDist.getDistance();
151 const std::vector<geom::Coordinate> getCoordinates()
const
153 return ptDist.getCoordinates();
156 class MaxPointDistanceFilter :
public geom::CoordinateFilter
159 MaxPointDistanceFilter(
const geom::Geometry& geom)
164 void filter_ro(
const geom::Coordinate* pt)
166 minPtDist.initialize();
167 DistanceToPoint::computeDistance(geom, *pt,
169 maxPtDist.setMaximum(minPtDist);
172 const PointPairDistance& getMaxPointDistance()
const
178 PointPairDistance maxPtDist;
179 PointPairDistance minPtDist;
180 DistanceToPoint euclideanDist;
181 const geom::Geometry& geom;
184 MaxPointDistanceFilter(
const MaxPointDistanceFilter& other);
185 MaxPointDistanceFilter& operator=(
const MaxPointDistanceFilter& rhs);
188 class MaxDensifiedByFractionDistanceFilter
189 :
public geom::CoordinateSequenceFilter
193 MaxDensifiedByFractionDistanceFilter(
194 const geom::Geometry& geom,
double fraction)
197 numSubSegs( std::size_t(util::round(1.0/fraction)) )
201 void filter_ro(
const geom::CoordinateSequence& seq,
204 bool isGeometryChanged()
const {
return false; }
206 bool isDone()
const {
return false; }
208 const PointPairDistance& getMaxPointDistance()
const {
213 PointPairDistance maxPtDist;
214 PointPairDistance minPtDist;
215 const geom::Geometry& geom;
216 std::size_t numSubSegs;
219 MaxDensifiedByFractionDistanceFilter(
const MaxDensifiedByFractionDistanceFilter& other);
220 MaxDensifiedByFractionDistanceFilter& operator=(
const MaxDensifiedByFractionDistanceFilter& rhs);
225 void compute(
const geom::Geometry& g0,
226 const geom::Geometry& g1)
228 computeOrientedDistance(g0, g1, ptDist);
229 computeOrientedDistance(g1, g0, ptDist);
232 void computeOrientedDistance(
const geom::Geometry& discreteGeom,
233 const geom::Geometry& geom,
234 PointPairDistance& ptDist);
236 const geom::Geometry& g0;
238 const geom::Geometry& g1;
240 PointPairDistance ptDist;
246 DiscreteHausdorffDistance(
const DiscreteHausdorffDistance& other);
247 DiscreteHausdorffDistance& operator=(
const DiscreteHausdorffDistance& rhs);
258 #endif // GEOS_ALGORITHM_DISTANCE_DISCRETEHAUSDORFFDISTANCE_H