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) // warning C4251: needs to have dll-interface to be used by clients of class 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;
270 #endif // GEOS_ALGORITHM_DISTANCE_DISCRETEHAUSDORFFDISTANCE_H 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
An algorithm for computing a distance metric which is an approximation to the Hausdorff Distance base...
Definition: DiscreteHausdorffDistance.h:100
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:25