def conductTrial(label, items): samples = 128 n = len(items) rt = RTree(m=2, M=4) for r in items: rt.add(r) box = rt.root.region width = box.x_max - box.x_min height = box.y_max - box.y_min # can compute density for any tree, samples at 128 random spots ct = 0 for _ in range(samples): x = box.x_min + random.random() * width y = box.y_min + random.random() * height for triple in rt.range(Region(x, y, x, y)): assert (triple[2] == False) ct += 1 print("Density", n, "{:.2f}%".format(100 * ct / (n * samples)), "intersect random point in ", str(box)) trials(n, items, BUILD, "Build") trials(n, items, SEARCH, "Search") trials(n, items, DELETE, "Delete")
def __init__(self): """App for creating R tree dynamically and executing range queries""" self.tree = RTree(m=2, M=4) self.ready = False # for range query self.selectedRegion = None self.newRegionStart = None self.newRegion = None # for identifiers self.counter = 0 self.master = tkinter.Tk() self.master.title('R Tree Range Query Application') self.w = tkinter.Frame(self.master, width=512, height=512) self.canvas = tkinter.Canvas(self.w, width=512, height=512) self.paint() self.canvas.bind("<Button-1>", self.startAdd) self.canvas.bind("<B1-Motion>", self.extendAdd) # only when right mouse dragged self.canvas.bind("<ButtonRelease-1>", self.endAdd) self.canvas.bind("<Button-3>", self.range) # when right mouse clicked self.canvas.bind("<ButtonRelease-3>", self.clear) self.canvas.bind("<B3-Motion>", self.range) # only when right mouse dragged self.w.pack()
def test_multipleM(self): # check multiple m,M values for m,M in zip([3, 4, 5, 6], [7, 8, 10, 13]): self.tree = RTree(m,M) regions = [] for ctr in range(500): r = Region(2*random.randint(2,250), 2*random.randint(2,250), 2*random.randint(2,250), 2*random.randint(2,250)) regions.append((r, ctr)) self.tree.add(r,ctr) # make sure all can be individually found for ctr in range(len(regions)): match = [m for m in self.tree.search(regions[ctr][0])][0] self.assertEquals(match, regions[ctr][0]) # make sure that all are contained within the self.ensure_maxBounding(self.tree.root)
def performanceR(): """Demonstrate RTree stores all rectangles.""" n = 1024 while n <= 131072: rt = RTree() added = [] for _ in range(n): new = randomRectangle() if rt.search(new) is None: rt.add(new) added.append(new) random.shuffle(added) for r in added: if rt.search(r) is None: print("Cannot find:" + r) assert False print("pass " + str(n)) n *= 2
def setUp(self): self.tree = RTree()