GEOS  3.14.0dev
SharedPathsOp.h
1 /**********************************************************************
2  *
3  * GEOS - Geometry Engine Open Source
4  * http://geos.osgeo.org
5  *
6  * Copyright (C) 2010 Sandro Santilli <strk@kbt.io>
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@kbt.io)
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 #pragma once
27 
28 #include <geos/export.h> // for GEOS_DLL
29 
30 #include <vector>
31 
32 // Forward declarations
33 namespace geos {
34 namespace geom {
35 class LineString;
36 class Geometry;
37 class GeometryFactory;
38 }
39 }
40 
41 
42 namespace geos {
43 namespace operation { // geos.operation
44 
46 namespace sharedpaths { // geos.operation.sharedpaths
47 
65 class GEOS_DLL SharedPathsOp {
66 public:
67 
69  typedef std::vector<geom::LineString*> PathList;
70 
89  static void sharedPathsOp(const geom::Geometry& g1,
90  const geom::Geometry& g2,
91  PathList& sameDirection,
92  PathList& oppositeDirection);
93 
103 
116  void getSharedPaths(PathList& sameDirection, PathList& oppositeDirection);
117 
119  static void clearEdges(PathList& from);
120 
121 private:
122 
129  void findLinearIntersections(PathList& to);
130 
135  bool isForward(const geom::LineString& edge,
136  const geom::Geometry& geom);
137 
140  bool
141  isSameDirection(const geom::LineString& edge)
142  {
143  return (isForward(edge, _g1) == isForward(edge, _g2));
144  }
145 
147  void checkLinealInput(const geom::Geometry& g);
148 
149  const geom::Geometry& _g1;
150  const geom::Geometry& _g2;
151  const geom::GeometryFactory& _gf;
152 
153  // Declare type as noncopyable
154  SharedPathsOp(const SharedPathsOp& other) = delete;
155  SharedPathsOp& operator=(const SharedPathsOp& rhs) = delete;
156 
157 };
158 
159 } // namespace geos.operation.sharedpaths
160 } // namespace geos.operation
161 } // namespace geos
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition: GeometryFactory.h:70
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:197
Definition: LineString.h:66
Find shared paths among two linear Geometry objects.
Definition: SharedPathsOp.h:65
static void sharedPathsOp(const geom::Geometry &g1, const geom::Geometry &g2, PathList &sameDirection, PathList &oppositeDirection)
std::vector< geom::LineString * > PathList
LineString vector (list of edges)
Definition: SharedPathsOp.h:69
void getSharedPaths(PathList &sameDirection, PathList &oppositeDirection)
static void clearEdges(PathList &from)
Delete all edges in the list.
SharedPathsOp(const geom::Geometry &g1, const geom::Geometry &g2)
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25