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

- File List

# IndexedPointInAreaLocator.h

    00001 /**********************************************************************
    00002  * $Id: IndexedPointInAreaLocator.h 2770 2009-12-03 19:27:18Z mloskot $
    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
    00017 #ifndef GEOS_ALGORITHM_LOCATE_INDEXEDPOINTINAREALOCATOR_H
    00018 #define GEOS_ALGORITHM_LOCATE_INDEXEDPOINTINAREALOCATOR_H
    00019
    00020 #include <geos/algorithm/locate/PointOnGeometryLocator.h> // inherited
    00021 #include <geos/index/ItemVisitor.h> // inherited
    00022
    00023 #include <vector> // composition
    00024
    00025 namespace geos {
    00026         namespace algorithm {
    00027                 class RayCrossingCounter;
    00028         }
    00029         namespace geom {
    00030                 class Geometry;
    00031                 class Coordinate;
    00032                 class CoordinateSequence;
    00033                 class LineSegment;
    00034         }
    00035         namespace index {
    00036                 namespace intervalrtree {
    00037                         class SortedPackedIntervalRTree;
    00038                 }
    00039         }
    00040 }
    00041
    00042 namespace geos {
    00043 namespace algorithm { // geos::algorithm
    00044 namespace locate { // geos::algorithm::locate
    00045
    00056 class IndexedPointInAreaLocator : public PointOnGeometryLocator
    00057 {
    00058 private:
    00059         class IntervalIndexedGeometry
    00060         {
    00061         private:
    00062                 index::intervalrtree::SortedPackedIntervalRTree * index;
    00063
    00064                 void init( const geom::Geometry & g);
    00065                 void addLine( geom::CoordinateSequence * pts);
    00066
    00067                 // To keep track of allocated LineSegments
    00068                 std::vector< geom::LineSegment* > allocatedSegments;
    00069
    00070         public:
    00071                 IntervalIndexedGeometry( const geom::Geometry & g);
    00072                 ~IntervalIndexedGeometry();
    00073
    00074                 void query(double min, double max, index::ItemVisitor * visitor);
    00075         };
    00076
    00077
    00078         class SegmentVisitor : public index::ItemVisitor
    00079         {
    00080         private:
    00081                 algorithm::RayCrossingCounter * counter;
    00082
    00083         public:
    00084                 SegmentVisitor( algorithm::RayCrossingCounter * counter)
    00085                 :       counter( counter)
    00086                 { }
    00087
    00088                 ~SegmentVisitor()
    00089                 { }
    00090
    00091                 void visitItem( void * item);
    00092         };
    00093
    00094
    00095         const geom::Geometry & areaGeom;
    00096         IntervalIndexedGeometry * index;
    00097
    00098         void buildIndex( const geom::Geometry & g);
    00099
    00100     // Declare type as noncopyable
    00101     IndexedPointInAreaLocator(const IndexedPointInAreaLocator& other);
    00102     IndexedPointInAreaLocator& operator=(const IndexedPointInAreaLocator& rhs);
    00103
    00104 public:
    00109         IndexedPointInAreaLocator( const geom::Geometry & g);
    00110
    00111         ~IndexedPointInAreaLocator();
    00112
    00119         int locate( const geom::Coordinate * /*const*/ p);
    00120
    00121 };
    00122
    00123 } // geos::algorithm::locate
    00124 } // geos::algorithm
    00125 } // geos
    00126
    00127 #endif // GEOS_ALGORITHM_LOCATE_INDEXEDPOINTINAREALOCATOR_H
    00128 /**********************************************************************
    00129  * $Log$
    00130  **********************************************************************/
    00131