00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef GEOS_PRECISION_GEOMETRYPRECISIONREDUCER_H
00020 #define GEOS_PRECISION_GEOMETRYPRECISIONREDUCER_H
00021
00022 #include <geos/export.h>
00023 #include <memory>
00024
00025
00026 namespace geos {
00027 namespace geom {
00028 class PrecisionModel;
00029 class GeometryFactory;
00030 class Geometry;
00031 }
00032 }
00033
00034 namespace geos {
00035 namespace precision {
00036
00042 class GEOS_DLL GeometryPrecisionReducer {
00043
00044 private:
00045
00046
00047 const geom::GeometryFactory *newFactory;
00048
00049 const geom::PrecisionModel &targetPM;
00050
00051 bool removeCollapsed;
00052
00053 bool isPointwise;
00054
00055 std::auto_ptr<geom::Geometry> reducePointwise( const geom::Geometry& geom );
00056
00057 std::auto_ptr<geom::Geometry> fixPolygonalTopology(
00058 const geom::Geometry& geom );
00059
00060 std::auto_ptr<geom::GeometryFactory> createFactory(
00061 const geom::GeometryFactory& oldGF,
00062 const geom::PrecisionModel& newPM );
00063
00064 GeometryPrecisionReducer(GeometryPrecisionReducer const&);
00065 GeometryPrecisionReducer& operator=(GeometryPrecisionReducer const&);
00066
00067 public:
00068
00080 static std::auto_ptr<geom::Geometry> reduce(
00081 const geom::Geometry &g,
00082 const geom::PrecisionModel &precModel )
00083 {
00084 GeometryPrecisionReducer reducer(precModel);
00085 return reducer.reduce(g);
00086 }
00087
00099 static std::auto_ptr<geom::Geometry> reducePointwise(
00100 const geom::Geometry &g,
00101 const geom::PrecisionModel &precModel )
00102 {
00103 GeometryPrecisionReducer reducer(precModel);
00104 reducer.setPointwise(true);
00105 return reducer.reduce(g);
00106 }
00107
00108 GeometryPrecisionReducer(const geom::PrecisionModel &pm)
00109 :
00110 newFactory(0),
00111 targetPM(pm),
00112 removeCollapsed(true),
00113 isPointwise(false)
00114 {}
00115
00126 GeometryPrecisionReducer(const geom::GeometryFactory &gf);
00127
00135 void setRemoveCollapsedComponents(bool remove) {
00136 removeCollapsed = remove;
00137 }
00138
00150 void setPointwise(bool pointwise)
00151 {
00152 isPointwise = pointwise;
00153 }
00154
00155 std::auto_ptr<geom::Geometry> reduce(const geom::Geometry& geom);
00156
00157 };
00158
00159 }
00160 }
00161
00162 #endif // GEOS_PRECISION_GEOMETRYPRECISIONREDUCER_H