def test_rtree(self): t = RTree() for object in self.objects: t.insert(object, self.objects[object]) self.assertEqual(len(self.objects), 100) qr = Rect(5, 5, 25, 25) # find objects with mbrs intersecting with qr res = [r.leaf_obj() for r in t.query_rect(qr) if r.is_leaf()] self.assertEqual(len(res), 4) res.sort() self.assertEqual(res, [0, 1, 10, 11]) # vertices are shared by all coincident rectangles res = [r.leaf_obj( ) for r in t.query_point((20.0, 20.0)) if r.is_leaf()] self.assertEqual(len(res), 4) res = [r.leaf_obj() for r in t.query_point((21, 20)) if r.is_leaf()] self.assertEqual(len(res), 2) # single internal point res = [r.leaf_obj() for r in t.query_point((21, 21)) if r.is_leaf()] self.assertEqual(len(res), 1) # single external point res = [r.leaf_obj() for r in t.query_point((-12, 21)) if r.is_leaf()] self.assertEqual(len(res), 0) qr = Rect(5, 6, 65, 7) res = [r.leaf_obj() for r in t.query_rect((qr)) if r.is_leaf()] self.assertEqual(len(res), 4)
def __init__(self, lines_arr, max_point_dist=0.1): self.pt_dict = {} self.adj_dict = {} self.rtree = RTree() # KD Tree related self.kd_tree = None self.points_kd = None self.kd_ptid_to_nodeid_map = {} self.kd_nodeid_to_ptid_map = {} self.kd_pt_data_list = [] self.network = None self.refine_graph(lines_arr, max_point_dist) self.build_all_elements()
import pysal as ps from pysal.cg import RTree, Rect from pysal.cg.standalone import get_shared_segments #MPI Boilerplate comm = MPI.COMM_WORLD rank = comm.Get_rank() if rank == 0: t1 = time.time() shp = ps.open(sys.argv[1]) t2 = time.time() print "File I/O took {} seconds".format(t2 - t1) tree_class = RTree() polys = [] for i, poly in enumerate(shp): vertices = poly.vertices b = poly.bounding_box bbox = Rect(b.left, b.lower, b.right, b.upper) tree_class.insert(i, bbox) polys.append((b, set(vertices))) quotient, remainder = divmod(len(polys), comm.size) scattersize = list([(quotient + remainder) ]) +\ [quotient for i in range(comm.size - 1)] scatteroffsets = [0] + (np.cumsum(scattersize)[:-1].tolist()) + [None] #chunks = [polys[scatteroffsets[i]:scatteroffsets[i+1]] for i in range(len(scatteroffsets)-1)] t3 = time.time() print "Generating tree took {} seconds.".format(t3 - t2)