def initDB(city, conf, scoref): extent = conf["extent"] table = conf["tablename"] maxTileSize = conf["maxtilesize"] featuresPerTile = conf["featurespertile"] extentX = extent[1][0] - extent[0][0] extentY = extent[1][1] - extent[0][1] print(extentX) print(extentY) index = {} bboxIndex = {} t0 = time.time() qt = 0 # create quadtree for i in range(0, int(math.ceil(extentX / maxTileSize))): for j in range(0, int(math.ceil(extentY / maxTileSize))): tileExtent = tile_extent(extent, maxTileSize, i, j) p0 = "{0} {1}".format(tileExtent[0][0], tileExtent[0][1]) p1 = "{0} {1}".format(tileExtent[0][0], tileExtent[1][1]) p2 = "{0} {1}".format(tileExtent[1][0], tileExtent[1][1]) p3 = "{0} {1}".format(tileExtent[1][0], tileExtent[0][1]) poly = [p0, p1, p2, p3] qt0 = time.time() scores = Session.score_for_polygon(table, poly, scoref) qt += time.time() - qt0 geoms = [] for score in scores: box3D = utils.Box3D(score['box3d']) centroid = box3D.centroid() if inside(tileExtent, centroid): corners = box3D.corners() geoms.append((score['gid'], centroid, score['score'], corners[0], corners[1])) if len(geoms) == 0: continue coord = "{0}/{1}/{2}".format(0, j, i) if len(geoms) > featuresPerTile: index[coord] = geoms[0:featuresPerTile] bbox = divide(tileExtent, geoms[featuresPerTile:len(geoms)], 1, i * 2, j * 2, maxTileSize / 2., featuresPerTile, index, bboxIndex) else: bbox = superbbox() index[coord] = geoms for geom in index[coord]: p1 = geom[3] p2 = geom[4] bbox[0][0] = min(bbox[0][0], p1[0], p2[0]) bbox[0][1] = min(bbox[0][1], p1[1], p2[1]) bbox[0][2] = min(bbox[0][2], p1[2], p2[2]) bbox[1][0] = max(bbox[1][0], p1[0], p2[0]) bbox[1][1] = max(bbox[1][1], p1[1], p2[1]) bbox[1][2] = max(bbox[1][2], p1[2], p2[2]) bboxIndex[coord] = bbox print("Query time : {0}".format(qt)) print("Quadtree creation total time : {0}".format(time.time() - t0)) t1 = time.time() # create index Session.add_column(table, "quadtile", "varchar(10)") Session.add_column(table, "weight", "real") for i in index: for j in index[i]: Session.update_table(table, i, j[2], j[0]) print("Table update time : {0}".format(time.time() - t1)) t2 = time.time() Session.create_index(table, "quadtile") print("Index creation time : {0}".format(time.time() - t2)) # create bbox table t3 = time.time() Session.create_bbox_table(table) for i in bboxIndex: b = bboxIndex[i] bbox_str = str(b[0][0]) + " " + str(b[0][1]) + " " + str(b[0][2]) \ + "," + str(b[1][0]) + " " + str(b[1][1]) + " " + str(b[1][2]) Session.insert_into_bbox_table(table, i, bbox_str) print("Bounding box table creation time : {0}".format(time.time() - t3))