GEOS
3.3.3
Main Page
Related Pages
Namespaces
Classes
Files
File List
include
geos
algorithm
locate
IndexedPointInAreaLocator.h
1
/**********************************************************************
2
* $Id: IndexedPointInAreaLocator.h 2770 2009-12-03 19:27:18Z mloskot $
3
*
4
* GEOS - Geometry Engine Open Source
5
* http://geos.refractions.net
6
*
7
* Copyright (C) 2006 Refractions Research Inc.
8
*
9
* This is free software; you can redistribute and/or modify it under
10
* the terms of the GNU Lesser General Public Licence as published
11
* by the Free Software Foundation.
12
* See the COPYING file for more information.
13
*
14
*
15
**********************************************************************/
16
17
#ifndef GEOS_ALGORITHM_LOCATE_INDEXEDPOINTINAREALOCATOR_H
18
#define GEOS_ALGORITHM_LOCATE_INDEXEDPOINTINAREALOCATOR_H
19
20
#include <geos/algorithm/locate/PointOnGeometryLocator.h>
// inherited
21
#include <geos/index/ItemVisitor.h>
// inherited
22
23
#include <vector>
// composition
24
25
namespace
geos {
26
namespace
algorithm {
27
class
RayCrossingCounter;
28
}
29
namespace
geom {
30
class
Geometry;
31
class
Coordinate;
32
class
CoordinateSequence;
33
class
LineSegment;
34
}
35
namespace
index {
36
namespace
intervalrtree {
37
class
SortedPackedIntervalRTree;
38
}
39
}
40
}
41
42
namespace
geos {
43
namespace
algorithm {
// geos::algorithm
44
namespace
locate {
// geos::algorithm::locate
45
56
class
IndexedPointInAreaLocator
:
public
PointOnGeometryLocator
57
{
58
private
:
59
class
IntervalIndexedGeometry
60
{
61
private
:
62
index::intervalrtree::SortedPackedIntervalRTree
* index;
63
64
void
init(
const
geom::Geometry
& g);
65
void
addLine(
geom::CoordinateSequence
* pts);
66
67
// To keep track of allocated LineSegments
68
std::vector< geom::LineSegment* > allocatedSegments;
69
70
public
:
71
IntervalIndexedGeometry(
const
geom::Geometry
& g);
72
~IntervalIndexedGeometry();
73
74
void
query(
double
min,
double
max,
index::ItemVisitor
* visitor);
75
};
76
77
78
class
SegmentVisitor :
public
index::ItemVisitor
79
{
80
private
:
81
algorithm::RayCrossingCounter
* counter;
82
83
public
:
84
SegmentVisitor(
algorithm::RayCrossingCounter
* counter)
85
: counter( counter)
86
{ }
87
88
~SegmentVisitor()
89
{ }
90
91
void
visitItem(
void
* item);
92
};
93
94
95
const
geom::Geometry
& areaGeom;
96
IntervalIndexedGeometry * index;
97
98
void
buildIndex(
const
geom::Geometry
& g);
99
100
// Declare type as noncopyable
101
IndexedPointInAreaLocator
(
const
IndexedPointInAreaLocator
& other);
102
IndexedPointInAreaLocator
& operator=(
const
IndexedPointInAreaLocator
& rhs);
103
104
public
:
109
IndexedPointInAreaLocator
(
const
geom::Geometry
& g);
110
111
~
IndexedPointInAreaLocator
();
112
119
int
locate
(
const
geom::Coordinate
*
/*const*/
p);
120
121
};
122
123
}
// geos::algorithm::locate
124
}
// geos::algorithm
125
}
// geos
126
127
#endif // GEOS_ALGORITHM_LOCATE_INDEXEDPOINTINAREALOCATOR_H
128
/**********************************************************************
129
* $Log$
130
**********************************************************************/
131
Generated on Thu Mar 13 2014 09:55:44 for GEOS by
1.8.1.2