[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