00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef GEOS_IDX_QUADTREE_NODE_H
00021 #define GEOS_IDX_QUADTREE_NODE_H
00022
00023 #include <geos/export.h>
00024 #include <geos/index/quadtree/NodeBase.h>
00025 #include <geos/geom/Coordinate.h>
00026 #include <geos/geom/Envelope.h>
00027
00028 #include <string>
00029 #include <memory>
00030
00031 #ifdef _MSC_VER
00032 #pragma warning(push)
00033 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
00034 #endif
00035
00036
00037 namespace geos {
00038 namespace geom {
00039
00040 class Envelope;
00041 }
00042 }
00043
00044 namespace geos {
00045 namespace index {
00046 namespace quadtree {
00047
00056 class GEOS_DLL Node: public NodeBase {
00057
00058 private:
00059
00061 std::auto_ptr<geom::Envelope> env;
00062
00063 geom::Coordinate centre;
00064
00065 int level;
00066
00073 Node* getSubnode(int index);
00074
00075 std::auto_ptr<Node> createSubnode(int index);
00076
00077 protected:
00078
00079 bool isSearchMatch(const geom::Envelope& searchEnv) const {
00080 return env->intersects(searchEnv);
00081 }
00082
00083 public:
00084
00085
00086 static std::auto_ptr<Node> createNode(const geom::Envelope& env);
00087
00089
00093 static std::auto_ptr<Node> createExpanded(std::auto_ptr<Node> node,
00094 const geom::Envelope& addEnv);
00095
00096 Node(std::auto_ptr<geom::Envelope> nenv, int nlevel)
00097 :
00098 env(nenv),
00099 centre((env->getMinX()+env->getMaxX())/2,
00100 (env->getMinY()+env->getMaxY())/2),
00101 level(nlevel)
00102 {
00103 }
00104
00105 virtual ~Node() {}
00106
00109 geom::Envelope* getEnvelope() { return env.get(); }
00110
00116 Node* getNode(const geom::Envelope *searchEnv);
00117
00122 NodeBase* find(const geom::Envelope *searchEnv);
00123
00124 void insertNode(std::auto_ptr<Node> node);
00125
00126 std::string toString() const;
00127
00128 };
00129
00130 }
00131 }
00132 }
00133
00134 #ifdef _MSC_VER
00135 #pragma warning(pop)
00136 #endif
00137
00138 #endif // GEOS_IDX_QUADTREE_NODE_H
00139
00140
00141
00142
00143
00144
00145
00146