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 {
129 if(dFrac > 1.0 || dFrac <= 0.0) {
131 "Fraction is not in range (0.0 - 1.0]");
141 return ptDist.getDistance();
147 computeOrientedDistance(g0, g1, ptDist);
148 return ptDist.getDistance();
151 const std::array<geom::Coordinate, 2>
152 getCoordinates()
const
154 return ptDist.getCoordinates();
157 class MaxPointDistanceFilter :
public geom::CoordinateFilter {
159 MaxPointDistanceFilter(
const geom::Geometry& p_geom)
165 filter_ro(
const geom::Coordinate* pt)
override
167 minPtDist.initialize();
168 DistanceToPoint::computeDistance(geom, *pt,
170 maxPtDist.setMaximum(minPtDist);
173 const PointPairDistance&
174 getMaxPointDistance()
const
180 PointPairDistance maxPtDist;
181 PointPairDistance minPtDist;
182 DistanceToPoint euclideanDist;
183 const geom::Geometry& geom;
186 MaxPointDistanceFilter(
const MaxPointDistanceFilter& other);
187 MaxPointDistanceFilter& operator=(
const MaxPointDistanceFilter& rhs);
190 class MaxDensifiedByFractionDistanceFilter
191 :
public geom::CoordinateSequenceFilter {
194 MaxDensifiedByFractionDistanceFilter(
195 const geom::Geometry& p_geom,
double fraction)
198 numSubSegs(std::size_t(util::
round(1.0 / fraction)))
202 void filter_ro(
const geom::CoordinateSequence& seq,
203 std::size_t index)
override;
206 isGeometryChanged()
const override
212 isDone()
const override
217 const PointPairDistance&
218 getMaxPointDistance()
const
224 PointPairDistance maxPtDist;
225 PointPairDistance minPtDist;
226 const geom::Geometry& geom;
227 std::size_t numSubSegs;
230 MaxDensifiedByFractionDistanceFilter(
const MaxDensifiedByFractionDistanceFilter& other);
231 MaxDensifiedByFractionDistanceFilter& operator=(
const MaxDensifiedByFractionDistanceFilter& rhs);
237 compute(
const geom::Geometry& p_g0,
238 const geom::Geometry& p_g1)
240 computeOrientedDistance(p_g0, p_g1, ptDist);
241 computeOrientedDistance(p_g1, p_g0, ptDist);
244 void computeOrientedDistance(
const geom::Geometry& discreteGeom,
245 const geom::Geometry& geom,
246 PointPairDistance& ptDist);
248 const geom::Geometry& g0;
250 const geom::Geometry& g1;
252 PointPairDistance ptDist;
258 DiscreteHausdorffDistance(
const DiscreteHausdorffDistance& other) =
delete;
259 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)
Definition: DiscreteHausdorffDistance.h:127
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:188
Indicates one or more illegal arguments.
Definition: IllegalArgumentException.h:34
double round(double val)
Definition: math.h:36
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:26