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 )
132 "Fraction is not in range (0.0 - 1.0]");
141 return ptDist.getDistance();
144 double orientedDistance()
146 computeOrientedDistance(g0, g1, ptDist);
147 return ptDist.getDistance();
150 const std::vector<geom::Coordinate> getCoordinates()
const 152 return ptDist.getCoordinates();
155 class MaxPointDistanceFilter :
public geom::CoordinateFilter
158 MaxPointDistanceFilter(
const geom::Geometry& geom)
163 void filter_ro(
const geom::Coordinate* pt)
165 minPtDist.initialize();
166 DistanceToPoint::computeDistance(geom, *pt,
168 maxPtDist.setMaximum(minPtDist);
171 const PointPairDistance& getMaxPointDistance()
const 177 PointPairDistance maxPtDist;
178 PointPairDistance minPtDist;
179 DistanceToPoint euclideanDist;
180 const geom::Geometry& geom;
183 MaxPointDistanceFilter(
const MaxPointDistanceFilter& other);
184 MaxPointDistanceFilter& operator=(
const MaxPointDistanceFilter& rhs);
187 class MaxDensifiedByFractionDistanceFilter
188 :
public geom::CoordinateSequenceFilter
192 MaxDensifiedByFractionDistanceFilter(
193 const geom::Geometry& geom,
double fraction)
196 numSubSegs( std::size_t(util::round(1.0/fraction)) )
200 void filter_ro(
const geom::CoordinateSequence& seq,
203 bool isGeometryChanged()
const {
return false; }
205 bool isDone()
const {
return false; }
207 const PointPairDistance& getMaxPointDistance()
const {
212 PointPairDistance maxPtDist;
213 PointPairDistance minPtDist;
214 const geom::Geometry& geom;
215 std::size_t numSubSegs;
218 MaxDensifiedByFractionDistanceFilter(
const MaxDensifiedByFractionDistanceFilter& other);
219 MaxDensifiedByFractionDistanceFilter& operator=(
const MaxDensifiedByFractionDistanceFilter& rhs);
224 void compute(
const geom::Geometry& g0,
225 const geom::Geometry& g1)
227 computeOrientedDistance(g0, g1, ptDist);
228 computeOrientedDistance(g1, g0, ptDist);
231 void computeOrientedDistance(
const geom::Geometry& discreteGeom,
232 const geom::Geometry& geom,
233 PointPairDistance& ptDist);
235 const geom::Geometry& g0;
237 const geom::Geometry& g1;
239 PointPairDistance ptDist;
245 DiscreteHausdorffDistance(
const DiscreteHausdorffDistance& other);
246 DiscreteHausdorffDistance& operator=(
const DiscreteHausdorffDistance& rhs);
257 #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:167
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