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