GEOS 3.4.2

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List

SharedPathsOp.h
1 /**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2010 Sandro Santilli <strk@keybit.net>
7 *
8 * This is free software; you can redistribute and/or modify it under
9 * the terms of the GNU Lesser General Public Licence as published
10 * by the Free Software Foundation.
11 * See the COPYING file for more information.
12 *
13 **********************************************************************
14 *
15 * Last port: original work
16 *
17 * Developed by Sandro Santilli (strk@keybit.net)
18 * for Faunalia (http://www.faunalia.it)
19 * with funding from Regione Toscana - Settore SISTEMA INFORMATIVO
20 * TERRITORIALE ED AMBIENTALE - for the project: "Sviluppo strumenti
21 * software per il trattamento di dati geografici basati su QuantumGIS
22 * e Postgis (CIG 0494241492)"
23 *
24 **********************************************************************/
25
26 #ifndef GEOS_OPERATION_SHAREDPATHSOP_H
27 #define GEOS_OPERATION_SHAREDPATHSOP_H
28
29 #include <geos/export.h> // for GEOS_DLL
30
31 #include <vector>
32
33 // Forward declarations
34 namespace geos {
35 namespace geom {
36 class LineString;
37 class Geometry;
38 class GeometryFactory;
39 }
40 }
41
42
43 namespace geos {
44 namespace operation { // geos.operation
45 namespace sharedpaths { // geos.operation.sharedpaths
46
64 class GEOS_DLL SharedPathsOp
65 {
66 public:
67
69 typedef std::vector<geom::LineString*> PathList;
70
72 //
89 static void sharedPathsOp(const geom::Geometry& g1,
90 const geom::Geometry& g2,
91 PathList& sameDirection,
92 PathList& oppositeDirection);
93
95 //
102 SharedPathsOp(const geom::Geometry& g1, const geom::Geometry& g2);
103
105 //
116 void getSharedPaths(PathList& sameDirection, PathList& oppositeDirection);
117
119 static void clearEdges(PathList& from);
120
121 private:
122
124 //
129 void findLinearIntersections(PathList& to);
130
132 //
135 bool isForward(const geom::LineString& edge,
136 const geom::Geometry& geom);
137
140 bool isSameDirection(const geom::LineString& edge) {
141 return (isForward(edge, _g1) == isForward(edge, _g2));
142 }
143
145 void checkLinealInput(const geom::Geometry& g);
146
147 const geom::Geometry& _g1;
148 const geom::Geometry& _g2;
149 const geom::GeometryFactory& _gf;
150
151 // Declare type as noncopyable
152 SharedPathsOp(const SharedPathsOp& other);
153 SharedPathsOp& operator=(const SharedPathsOp& rhs);
154
155 };
156
157 } // namespace geos.operation.sharedpaths
158 } // namespace geos.operation
159 } // namespace geos
160
161 #endif
162