GEOS  3.8.0dev
RayCrossingCounter.h
1 /**********************************************************************
2  *
3  * GEOS - Geometry Engine Open Source
4  * http://geos.osgeo.org
5  *
6  * Copyright (C) 2006 Refractions Research Inc.
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  *
16  * Last port: algorithm/RayCrossingCounter.java rev. 1.2 (JTS-1.9)
17  *
18  **********************************************************************/
19 
20 #ifndef GEOS_ALGORITHM_RAYCROSSINGCOUNTER_H
21 #define GEOS_ALGORITHM_RAYCROSSINGCOUNTER_H
22 
23 #include <geos/export.h>
24 #include <geos/geom/Location.h>
25 
26 #include <vector>
27 
28 // forward declarations
29 namespace geos {
30 namespace geom {
31 class Coordinate;
32 class CoordinateSequence;
33 }
34 }
35 
36 
37 namespace geos {
38 namespace algorithm {
39 
65 class GEOS_DLL RayCrossingCounter {
66 private:
67  const geom::Coordinate& point;
68 
69  int crossingCount;
70 
71  // true if the test point lies on an input segment
72  bool isPointOnSegment;
73 
74  // Declare type as noncopyable
75  RayCrossingCounter(const RayCrossingCounter& other) = delete;
76  RayCrossingCounter& operator=(const RayCrossingCounter& rhs) = delete;
77 
78 public:
88  static geom::Location locatePointInRing(const geom::Coordinate& p,
89  const geom::CoordinateSequence& ring);
90 
92  static geom::Location locatePointInRing(const geom::Coordinate& p,
93  const std::vector<const geom::Coordinate*>& ring);
94 
95  RayCrossingCounter(const geom::Coordinate& p_point)
96  : point(p_point),
97  crossingCount(0),
98  isPointOnSegment(false)
99  { }
100 
107  void countSegment(const geom::Coordinate& p1,
108  const geom::Coordinate& p2);
109 
119  bool
121  {
122  return isPointOnSegment;
123  }
124 
135  geom::Location getLocation();
136 
146  bool isPointInPolygon();
147 
148 };
149 
150 } // geos::algorithm
151 } // geos
152 
153 #endif // GEOS_ALGORITHM_RAYCROSSINGCOUNTER_H
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:60
bool isOnSegment()
Reports whether the point lies exactly on one of the supplied segments.
Definition: RayCrossingCounter.h:120
Location
Constants representing the location of a point relative to a geometry.
Definition: Location.h:33
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:25
The internal representation of a list of coordinates inside a Geometry.
Definition: CoordinateSequence.h:58
Counts the number of segments crossed by a horizontal ray extending to the right from a given point...
Definition: RayCrossingCounter.h:65