GEOS
3.6.2
|
00001 /********************************************************************** 00002 * 00003 * GEOS - Geometry Engine Open Source 00004 * http://geos.osgeo.org 00005 * 00006 * Copyright (C) 2006 Refractions Research Inc. 00007 * 00008 * This is free software; you can redistribute and/or modify it under 00009 * the terms of the GNU Lesser General Public Licence as published 00010 * by the Free Software Foundation. 00011 * See the COPYING file for more information. 00012 * 00013 * 00014 **********************************************************************/ 00015 00016 #ifndef GEOS_INDEX_INTERVALRTREE_INTERVALRTREENODE_H 00017 #define GEOS_INDEX_INTERVALRTREE_INTERVALRTREENODE_H 00018 00019 #include <geos/platform.h> 00020 #include <vector> 00021 #include <limits> 00022 00023 // forward declarations 00024 namespace geos { 00025 namespace index { 00026 class ItemVisitor; 00027 } 00028 } 00029 00030 00031 namespace geos { 00032 namespace index { 00033 namespace intervalrtree { 00034 00035 class IntervalRTreeNode 00036 { 00037 private: 00038 protected: 00039 double min; 00040 double max; 00041 00042 bool intersects( double queryMin, double queryMax) const 00043 { 00044 if (min > queryMax || max < queryMin) 00045 return false; 00046 00047 return true; 00048 } 00049 00050 public: 00051 typedef std::vector<const IntervalRTreeNode *> ConstVect; 00052 00053 IntervalRTreeNode() 00054 : min( DoubleInfinity ), 00055 max( DoubleNegInfinity ) 00056 { } 00057 00058 IntervalRTreeNode( double min, double max) 00059 : min( min ), 00060 max( max ) 00061 { } 00062 00063 virtual ~IntervalRTreeNode() 00064 { } 00065 00066 double getMin() const 00067 { 00068 return min; 00069 } 00070 00071 double getMax() const 00072 { 00073 return max; 00074 } 00075 00076 virtual void query( double queryMin, double queryMax, ItemVisitor * visitor) const =0; 00077 00078 //std::string toString() 00079 //{ 00080 // return WKTWriter.toLineString(new Coordinate(min, 0), new Coordinate(max, 0)); 00081 //} 00082 00083 00084 //class NodeComparator 00085 //{ 00086 //public: 00087 static bool compare( const IntervalRTreeNode * n1, const IntervalRTreeNode * n2) 00088 { 00089 //IntervalRTreeNode * n1 = dynamic_cast<IntervalRTreeNode *>( o1); 00090 //IntervalRTreeNode * n2 = dynamic_cast<IntervalRTreeNode *>( o2); 00091 00092 double mid1 = (n1->getMin() + n1->getMax()) / 2; 00093 double mid2 = (n2->getMin() + n2->getMax()) / 2; 00094 00095 //if (mid1 < mid2) return -1; 00096 //if (mid1 > mid2) return 1; 00097 //return 0; 00098 00099 return mid1 > mid2; 00100 } 00101 //}; 00102 00103 }; 00104 00105 } // geos::index::intervalrtree 00106 } // geos::index 00107 } // geos 00108 00109 #endif // GEOS_INDEX_INTERVALRTREE_INTERVALRTREENODE_H 00110