GEOS 3.2.2
|
00001 /********************************************************************** 00002 * $Id: LineMerger.h 2652 2009-10-05 16:44:39Z strk $ 00003 * 00004 * GEOS - Geometry Engine Open Source 00005 * http://geos.refractions.net 00006 * 00007 * Copyright (C) 2006 Refractions Research Inc. 00008 * 00009 * This is free software; you can redistribute and/or modify it under 00010 * the terms of the GNU Lesser General Public Licence as published 00011 * by the Free Software Foundation. 00012 * See the COPYING file for more information. 00013 * 00014 ********************************************************************** 00015 * 00016 * Last port: operation/linemerge/LineMerger.java rev. 1.7 (JTS-1.10) 00017 * 00018 **********************************************************************/ 00019 00020 #ifndef GEOS_OP_LINEMERGE_LINEMERGER_H 00021 #define GEOS_OP_LINEMERGE_LINEMERGER_H 00022 00023 #include <geos/export.h> 00024 00025 #include <geos/operation/linemerge/LineMergeGraph.h> // for composition 00026 00027 #include <vector> 00028 00029 // Forward declarations 00030 namespace geos { 00031 namespace geom { 00032 class LineString; 00033 class GeometryFactory; 00034 class Geometry; 00035 } 00036 namespace planargraph { 00037 class Node; 00038 } 00039 namespace operation { 00040 namespace linemerge { 00041 class EdgeString; 00042 class LineMergeDirectedEdge; 00043 } 00044 } 00045 } 00046 00047 00048 namespace geos { 00049 namespace operation { // geos::operation 00050 namespace linemerge { // geos::operation::linemerge 00051 00072 class GEOS_DLL LineMerger { 00073 00074 private: 00075 00076 LineMergeGraph graph; 00077 00078 std::vector<geom::LineString*> *mergedLineStrings; 00079 00080 std::vector<EdgeString*> edgeStrings; 00081 00082 const geom::GeometryFactory *factory; 00083 00084 void merge(); 00085 00086 void buildEdgeStringsForObviousStartNodes(); 00087 00088 void buildEdgeStringsForIsolatedLoops(); 00089 00090 void buildEdgeStringsForUnprocessedNodes(); 00091 00092 void buildEdgeStringsForNonDegree2Nodes(); 00093 00094 void buildEdgeStringsStartingAt(planargraph::Node *node); 00095 00096 EdgeString* buildEdgeStringStartingWith(LineMergeDirectedEdge *start); 00097 00098 public: 00099 LineMerger(); 00100 ~LineMerger(); 00101 00110 void add(std::vector<geom::Geometry*> *geometries); 00111 00120 void add(const geom::Geometry *geometry); 00121 00127 std::vector<geom::LineString*>* getMergedLineStrings(); 00128 00129 void add(const geom::LineString *lineString); 00130 00131 }; 00132 00133 } // namespace geos::operation::linemerge 00134 } // namespace geos::operation 00135 } // namespace geos 00136 00137 #endif // GEOS_OP_LINEMERGE_LINEMERGER_H 00138 00139 /********************************************************************** 00140 * $Log$ 00141 * Revision 1.1 2006/03/22 10:13:53 strk 00142 * opLinemerge.h split 00143 * 00144 **********************************************************************/