def get_bounding_boxes(haz_metadata, exp_metadata, req_bbox): """Check and get appropriate bounding boxes for input layers Input haz_metadata: Metadata for hazard layer exp_metadata: Metadata for exposure layer req_bbox: Bounding box (string) as requested by HTML POST. Output haz_bbox: Bounding box to be used for hazard layer. exp_bbox: Bounding box to be used for exposure layer imp_bbox: Bounding box to be used for resulting impact layer Note exp_bbox and imp_bbox are the same and calculated as the intersection among hazard, exposure and viewport bounds. haz_bbox may be grown by one pixel size in case exposure data is vector data to make sure points always can be interpolated """ # Input checks msg = ('Invalid bounding box %s (%s). ' 'It must be a string' % (str(req_bbox), type(req_bbox))) assert isinstance(req_bbox, basestring), msg check_bbox_string(req_bbox) # Get bounding boxes for layers and viewport haz_bbox = haz_metadata['bounding_box'] exp_bbox = exp_metadata['bounding_box'] vpt_bbox = bboxstring2list(req_bbox) # New bounding box for data common to hazard, exposure and viewport # Download only data within this intersection intersection_bbox = bbox_intersection(vpt_bbox, haz_bbox, exp_bbox) if intersection_bbox is None: # Bounding boxes did not overlap msg = ('Bounding boxes of hazard data [%s], exposure data [%s] ' 'and viewport [%s] did not overlap, so no computation was ' 'done. Please make sure you pan to where the data is and ' 'that hazard and exposure data overlaps.' % (bboxlist2string(haz_bbox, decimals=3), bboxlist2string(exp_bbox, decimals=3), bboxlist2string(vpt_bbox, decimals=3))) logger.info(msg) raise Exception(msg) # Grow hazard bbox to buffer this common bbox in case where # hazard is raster and exposure is vector if (haz_metadata['layer_type'] == 'raster' and exp_metadata['layer_type'] == 'vector'): haz_res = haz_metadata['resolution'] haz_bbox = buffered_bounding_box(intersection_bbox, haz_res) else: haz_bbox = intersection_bbox # Usually the intersection bbox is used for both exposure layer and result exp_bbox = imp_bbox = intersection_bbox return haz_bbox, exp_bbox, imp_bbox