From cf62e59ad79f12e22e3ed4ab07a72f56ec0158d5 Mon Sep 17 00:00:00 2001 From: josidd <joseph.siddons@noc.ac.uk> Date: Wed, 26 Feb 2025 09:21:03 +0000 Subject: [PATCH] feat: add len method to QuadTree and OctTree classes --- GeoSpatialTools/octtree.py | 18 ++++++++++++++++++ GeoSpatialTools/quadtree.py | 13 +++++++++++++ test/test_octtree.py | 1 + test/test_quadtree.py | 1 + 4 files changed, 33 insertions(+) diff --git a/GeoSpatialTools/octtree.py b/GeoSpatialTools/octtree.py index 33e32c5..250f145 100644 --- a/GeoSpatialTools/octtree.py +++ b/GeoSpatialTools/octtree.py @@ -461,6 +461,24 @@ class OctTree: out += f"{self.southeastfwd}" return out + def len(self, _current_len: int = 0) -> int: + """Get the number of points in the OctTree""" + _current_len += len(self.points) + print(_current_len) + if not self.divided: + return _current_len + + _current_len = self.northeastback.len(_current_len) + _current_len = self.northwestback.len(_current_len) + _current_len = self.southeastback.len(_current_len) + _current_len = self.southwestback.len(_current_len) + _current_len = self.northeastfwd.len(_current_len) + _current_len = self.northwestfwd.len(_current_len) + _current_len = self.southeastfwd.len(_current_len) + _current_len = self.southwestfwd.len(_current_len) + + return _current_len + def divide(self): """Divide the QuadTree""" self.northwestfwd = OctTree( diff --git a/GeoSpatialTools/quadtree.py b/GeoSpatialTools/quadtree.py index b7a3ad7..1ef4e31 100644 --- a/GeoSpatialTools/quadtree.py +++ b/GeoSpatialTools/quadtree.py @@ -340,6 +340,19 @@ class QuadTree: out += f"{self.southeast}" return out + def len(self, _current_len: int = 0) -> int: + """Get the number of points in the OctTree""" + _current_len += len(self.points) + if not self.divided: + return _current_len + + _current_len = self.northeast.len(_current_len) + _current_len = self.northwest.len(_current_len) + _current_len = self.southeast.len(_current_len) + _current_len = self.southwest.len(_current_len) + + return _current_len + def divide(self): """Divide the QuadTree""" self.northwest = QuadTree( diff --git a/test/test_octtree.py b/test/test_octtree.py index 4a04eb2..7a3d979 100644 --- a/test/test_octtree.py +++ b/test/test_octtree.py @@ -198,6 +198,7 @@ class TestOctTree(unittest.TestCase): ] for point in points: otree.insert(point) + assert otree.len() == len(points) - 1 # NOTE: 1 point not added assert otree.divided expected = [ points[:3], diff --git a/test/test_quadtree.py b/test/test_quadtree.py index 86a643e..9f4546c 100644 --- a/test/test_quadtree.py +++ b/test/test_quadtree.py @@ -94,6 +94,7 @@ class TestQuadTree(unittest.TestCase): for point in points: qtree.insert(point) assert qtree.divided + assert qtree.len() == len(points) res = [ qtree.points, qtree.northwest.points, -- GitLab