def build_out_nodes(Config, region_node, regions, raster, raster_affine, pop_threshold, perform_split=True): Octtree.fid_counter = 0 octtree_top = build(region_node.polygon, region_node, raster, raster_affine, pop_threshold) if perform_split: print "\toriginal number zones: ", octtree_top.count_populated() to_merge = split(Config, octtree_top, regions, raster, raster_affine) merge(Config, to_merge, pop_threshold) print "\tafter split and merge: ", octtree_top.count_populated() bounding_area = get_region_boundary(regions) #need to check against boundary too. octtree_top.prune(bounding_area) # ... do something ... #pr.disable() #pr.dump_stats("data/stats") return octtree_top
if __name__ == "__main__": Config = ConfigParser.ConfigParser(allow_no_value=True) if len(sys.argv) == 1 or not os.path.exists(sys.argv[1]): raise IOError("please supply a configuration file as a program arugment") Config.read(sys.argv[1]) with rasterio.open(Config.get("Input", "combined_raster")) as r: raster_array = r.read(1) transform = r.affine zonesSaptialRef = r.crs.to_dict() regions = region_ops.load_regions(Config) boundary = region_ops.get_region_boundary(regions) envelope = region_ops.get_square_envelope(raster_array.shape, transform) region_octtree = octtree.OcttreeNode(envelope, None, None) if Config.get("Parameters", "mode") == 'Trend': region_octtree = iteration.model_zones_vs_threshold(Config, region_octtree, regions, raster_array, r.affine) else: if Config.get("Parameters", "mode") == 'Iterative': region_octtree = iteration.solve_iteratively(Config, region_octtree, regions, raster_array, r.affine) if Config.get("Parameters", "mode") == 'Once': pop_threshold = Config.getint("Parameters", "population_threshold") region_octtree = octtree.build_out_nodes(Config, region_octtree, regions, raster_array, r.affine, pop_threshold) helper_functions.calculate_final_values(Config, region_octtree)