00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GEOS_GEOM_UTIL_COMPONENTCOORDINATEEXTRACTER_H
00018 #define GEOS_GEOM_UTIL_COMPONENTCOORDINATEEXTRACTER_H
00019
00020 #include <vector>
00021
00022 #include <geos/geom/GeometryComponentFilter.h>
00023 #include <geos/geom/Geometry.h>
00024 #include <geos/geom/Coordinate.h>
00025 #include <geos/geom/LineString.h>
00026 #include <geos/geom/Point.h>
00027
00028
00029 namespace geos {
00030 namespace geom {
00031 namespace util {
00032
00039 class ComponentCoordinateExtracter : public GeometryComponentFilter
00040 {
00041 public:
00049 static void getCoordinates(const Geometry &geom, std::vector<const Coordinate*> &ret)
00050 {
00051 ComponentCoordinateExtracter cce(ret);
00052 geom.apply_ro(&cce);
00053 }
00054
00059 ComponentCoordinateExtracter( std::vector<const Coordinate*> &newComps)
00060 :
00061 comps(newComps)
00062 {}
00063
00064 void filter_rw( Geometry * geom)
00065 {
00066 if ( geom->getGeometryTypeId() == geos::geom::GEOS_LINEARRING
00067 || geom->getGeometryTypeId() == geos::geom::GEOS_LINESTRING
00068 || geom->getGeometryTypeId() == geos::geom::GEOS_POINT )
00069 comps.push_back( geom->getCoordinate() );
00070
00071
00072
00073
00074 }
00075
00076 void filter_ro( const Geometry * geom)
00077 {
00078
00079
00080 if ( geom->getGeometryTypeId() == geos::geom::GEOS_LINEARRING
00081 || geom->getGeometryTypeId() == geos::geom::GEOS_LINESTRING
00082 || geom->getGeometryTypeId() == geos::geom::GEOS_POINT )
00083 comps.push_back( geom->getCoordinate() );
00084
00085
00086 }
00087
00088 private:
00089
00090 Coordinate::ConstVect &comps;
00091
00092
00093 ComponentCoordinateExtracter(const ComponentCoordinateExtracter& other);
00094 ComponentCoordinateExtracter& operator=(const ComponentCoordinateExtracter& rhs);
00095 };
00096
00097 }
00098 }
00099 }
00100
00101 #endif //GEOS_GEOM_UTIL_COMPONENTCOORDINATEEXTRACTER_H
00102
00103
00104
00105
00106