[geos-commits] r2067 - trunk/source/headers/geos/geom/util
svn_geos at osgeo.org
svn_geos at osgeo.org
Fri Dec 21 15:44:21 EST 2007
Author: benjubb
Date: 2007-12-21 15:44:20 -0500 (Fri, 21 Dec 2007)
New Revision: 2067
Added:
trunk/source/headers/geos/geom/util/ComponentCoordinateExtracter.h
Log:
Added from JTS 1.9 to support prepared geometry
Added: trunk/source/headers/geos/geom/util/ComponentCoordinateExtracter.h
===================================================================
--- trunk/source/headers/geos/geom/util/ComponentCoordinateExtracter.h (rev 0)
+++ trunk/source/headers/geos/geom/util/ComponentCoordinateExtracter.h 2007-12-21 20:44:20 UTC (rev 2067)
@@ -0,0 +1,103 @@
+/**********************************************************************
+ * $Id
+ *
+ * GEOS - Geometry Engine Open Source
+ * http://geos.refractions.net
+ *
+ * Copyright (C) 2001-2002 Vivid Solutions Inc.
+ * Copyright (C) 2006 Refractions Research Inc.
+ *
+ * This is free software; you can redistribute and/or modify it under
+ * the terms of the GNU Lesser General Public Licence as published
+ * by the Free Software Foundation.
+ * See the COPYING file for more information.
+ *
+ **********************************************************************/
+
+#ifndef GEOS_GEOM_UTIL_COMPONENTCOORDINATEEXTRACTER_H
+#define GEOS_GEOM_UTIL_COMPONENTCOORDINATEEXTRACTER_H
+
+#include <vector>
+
+#include <geos/geom/GeometryComponentFilter.h>
+#include <geos/geom/Geometry.h> // to be removed when we have the .inl
+#include <geos/geom/Coordinate.h> // to be removed when we have the .inl
+#include <geos/geom/LineString.h> // to be removed when we have the .inl
+#include <geos/geom/Point.h> // to be removed when we have the .inl
+//#include <geos/platform.h>
+
+namespace geos {
+namespace geom { // geos::geom
+namespace util { // geos::geom::util
+
+/**
+ * Extracts a single representative {@link Coordinate}
+ * from each connected component of a {@link Geometry}.
+ *
+ * @version 1.9
+ */
+class ComponentCoordinateExtracter : public GeometryComponentFilter
+{
+private:
+
+ Coordinate::ConstVect &comps;
+
+public:
+ /**
+ * Push the linear components from a single geometry into
+ * the provided vector.
+ * If more than one geometry is to be processed, it is more
+ * efficient to create a single ComponentCoordinateFilter instance
+ * and pass it to multiple geometries.
+ */
+ static void getCoordinates(const Geometry &geom, std::vector<const Coordinate*> &ret)
+ {
+ ComponentCoordinateExtracter cce(ret);
+ geom.apply_ro(&cce);
+ }
+
+ /**
+ * Constructs a ComponentCoordinateFilter with a list in which
+ * to store Coordinates found.
+ */
+ ComponentCoordinateExtracter( std::vector<const Coordinate*> &newComps)
+ :
+ comps(newComps)
+ {}
+
+ void filter_rw( Geometry * geom)
+ {
+ if ( geom->getGeometryTypeId() == GeometryTypeId::GEOS_LINEARRING
+ || geom->getGeometryTypeId() == GeometryTypeId::GEOS_LINESTRING
+ || geom->getGeometryTypeId() == GeometryTypeId::GEOS_POINT )
+ comps.push_back( geom->getCoordinate() );
+ //if ( typeid( *geom ) == typeid( LineString )
+ // || typeid( *geom ) == typeid( Point ) )
+ //if ( const Coordinate *ls=dynamic_cast<const Coordinate *>(geom) )
+ // comps.push_back(ls);
+ }
+
+ void filter_ro( const Geometry * geom)
+ {
+ //if ( typeid( *geom ) == typeid( LineString )
+ // || typeid( *geom ) == typeid( Point ) )
+ if ( geom->getGeometryTypeId() == GeometryTypeId::GEOS_LINEARRING
+ || geom->getGeometryTypeId() == GeometryTypeId::GEOS_LINESTRING
+ || geom->getGeometryTypeId() == GeometryTypeId::GEOS_POINT )
+ comps.push_back( geom->getCoordinate() );
+ //if ( const Coordinate *ls=dynamic_cast<const Coordinate *>(geom) )
+ // comps.push_back(ls);
+ }
+
+};
+
+} // namespace geos.geom.util
+} // namespace geos.geom
+} // namespace geos
+
+#endif //GEOS_GEOM_UTIL_COMPONENTCOORDINATEEXTRACTER_H
+
+/**********************************************************************
+ * $Log$
+ *
+ **********************************************************************/
Property changes on: trunk/source/headers/geos/geom/util/ComponentCoordinateExtracter.h
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
More information about the geos-commits
mailing list