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()
Beispiel #3
0
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)