def get_ecoregions(bioregion): if report_cache_exists(bioregion, 'ecoregions'): ecoregion_tuples = get_report_cache(bioregion, 'ecoregions') return ecoregion_tuples else: ecoregions = EcoRegions.objects.filter( geometry__bboverlaps=bioregion.output_geom) ecoregion_tuples = [ (ecoregion.geometry.intersection(bioregion.output_geom).area, ecoregion.eco_name) for ecoregion in ecoregions if ecoregion.geometry.intersects(bioregion.output_geom) ] ecoregion_dict = {} for area, name in ecoregion_tuples: if name in ecoregion_dict.keys(): ecoregion_dict[name] += area else: ecoregion_dict[name] = area ecoregion_tuples = [(name, convert_float_to_area_display_units(area)) for name, area in ecoregion_dict.items()] ecoregion_tuples.sort() ecoregion_tuples = [(eco_tuple[0], eco_tuple[1], convert_sq_km_to_sq_mi(eco_tuple[1])) for eco_tuple in ecoregion_tuples] #ecoregion_names = [name for (area, name) in ecoregion_tuples] create_report_cache(bioregion, dict(ecoregions=ecoregion_tuples)) #just return the following for now (until we get caching in place) #ecoregion_names = ['Central and Southern Cascades forests', 'Central Pacific coastal forests', 'Willamette Valley forests', 'Puget lowland forests', 'Eastern Cascades forests', 'Klamath-Siskiyou forests', 'Snake-Columbia shrub steppe', 'Blue Mountains forests'] return ecoregion_tuples
def get_last_wild(bioregion): if report_cache_exists(bioregion, 'wild_regions'): lastwild_tuples = get_report_cache(bioregion, 'wild_regions') return lastwild_tuples else: wild_regions = LastWild.objects.filter(geometry__bboverlaps=bioregion.output_geom) wild_region_tuples = [] for wild_region in wild_regions: if wild_region.geometry.valid: wild_geom = wild_region.geometry else: wild_geom = wild_region.geometry.buffer(0) if wild_geom.intersects(bioregion.output_geom): inter_geom = wild_geom.intersection(bioregion.output_geom) wild_region_tuples.append((inter_geom.area, wild_region.eco_name)) #wild_region_tuples = [(wild_region.geometry.intersection(bioregion.output_geom).area, wild_region.eco_name) for wild_region in wild_regions if wild_region.geometry.intersects(bioregion.output_geom)] wild_region_dict = {} for area,name in wild_region_tuples: if name is not None: if name in wild_region_dict.keys(): wild_region_dict[name] += area else: wild_region_dict[name] = area wild_region_tuples = [(name, convert_float_to_area_display_units(area)) for name,area in wild_region_dict.items()] wild_region_tuples.sort() wild_region_tuples = [(wild_tuple[0], wild_tuple[1], convert_sq_km_to_sq_mi(wild_tuple[1])) for wild_tuple in wild_region_tuples] create_report_cache(bioregion, dict(wild_regions=wild_region_tuples)) return wild_region_tuples
def get_watersheds(bioregion): if report_cache_exists(bioregion, 'watersheds'): watershed_tuples = get_report_cache(bioregion, 'watersheds') return watershed_tuples else: watersheds = Watersheds.objects.filter( geometry__bboverlaps=bioregion.output_geom) watershed_tuples = [ (watershed.geometry.intersection(bioregion.output_geom).area, watershed.maj_name) for watershed in watersheds if watershed.geometry.intersects(bioregion.output_geom) ] watershed_dict = {} for area, name in watershed_tuples: if name in watershed_dict.keys(): watershed_dict[name] += area else: watershed_dict[name] = area watershed_tuples = [(name, convert_float_to_area_display_units(area)) for name, area in watershed_dict.items()] watershed_tuples.sort() watershed_tuples = [(watershed_tuple[0], watershed_tuple[1], convert_sq_km_to_sq_mi(watershed_tuple[1])) for watershed_tuple in watershed_tuples] create_report_cache(bioregion, dict(watersheds=watershed_tuples)) return watershed_tuples
def get_sea_rise_impacts(bioregion): s1_geom = RasterDataset.objects.get(name="sea_rise_1m") s3_geom = RasterDataset.objects.get(name="sea_rise_3m") s6_geom = RasterDataset.objects.get(name="sea_rise_6m") s1_stats = zonal_stats(bioregion.output_geom, s1_geom) s3_stats = zonal_stats(bioregion.output_geom, s3_geom) s6_stats = zonal_stats(bioregion.output_geom, s6_geom) land_loss_1m = s1_stats.sum * sea_level_grid_size land_loss_3m = s3_stats.sum * sea_level_grid_size land_loss_6m = s6_stats.sum * sea_level_grid_size land_loss_1m_km = int(convert_float_to_area_display_units(land_loss_1m)) land_loss_1m_mi = int(convert_sq_km_to_sq_mi(land_loss_1m_km)) land_loss_3m_km = int(convert_float_to_area_display_units(land_loss_3m)) land_loss_3m_mi = int(convert_sq_km_to_sq_mi(land_loss_3m_km)) land_loss_6m_km = int(convert_float_to_area_display_units(land_loss_6m)) land_loss_6m_mi = int(convert_sq_km_to_sq_mi(land_loss_6m_km)) return (land_loss_1m_km, land_loss_1m_mi), (land_loss_3m_km, land_loss_3m_mi), (land_loss_6m_km, land_loss_6m_mi)
def get_sea_rise_impacts(bioregion): s1_geom = RasterDataset.objects.get(name='sea_rise_1m') s3_geom = RasterDataset.objects.get(name='sea_rise_3m') s6_geom = RasterDataset.objects.get(name='sea_rise_6m') s1_stats = zonal_stats(bioregion.output_geom, s1_geom) s3_stats = zonal_stats(bioregion.output_geom, s3_geom) s6_stats = zonal_stats(bioregion.output_geom, s6_geom) land_loss_1m = s1_stats.sum * sea_level_grid_size land_loss_3m = s3_stats.sum * sea_level_grid_size land_loss_6m = s6_stats.sum * sea_level_grid_size land_loss_1m_km = int(convert_float_to_area_display_units(land_loss_1m)) land_loss_1m_mi = int(convert_sq_km_to_sq_mi(land_loss_1m_km)) land_loss_3m_km = int(convert_float_to_area_display_units(land_loss_3m)) land_loss_3m_mi = int(convert_sq_km_to_sq_mi(land_loss_3m_km)) land_loss_6m_km = int(convert_float_to_area_display_units(land_loss_6m)) land_loss_6m_mi = int(convert_sq_km_to_sq_mi(land_loss_6m_km)) return (land_loss_1m_km, land_loss_1m_mi), (land_loss_3m_km, land_loss_3m_mi), (land_loss_6m_km, land_loss_6m_mi)
def get_marine_ecoregions(bioregion): if report_cache_exists(bioregion, 'marineregions'): marineregion_tuples = get_report_cache(bioregion, 'marineregions') return marineregion_tuples else: marineregions = MarineRegions.objects.filter(geometry__bboverlaps=bioregion.output_geom) marineregion_tuples = [(marineregion.geometry.intersection(bioregion.output_geom).area, marineregion.ecoregion) for marineregion in marineregions if marineregion.geometry.intersects(bioregion.output_geom)] marineregion_dict = {} for area,name in marineregion_tuples: if name in marineregion_dict.keys(): marineregion_dict[name] += area else: marineregion_dict[name] = area marineregion_tuples = [(name, convert_float_to_area_display_units(area)) for name,area in marineregion_dict.items()] marineregion_tuples.sort() marineregion_tuples = [(marine_tuple[0], marine_tuple[1], convert_sq_km_to_sq_mi(marine_tuple[1])) for marine_tuple in marineregion_tuples] create_report_cache(bioregion, dict(marineregions=marineregion_tuples)) return marineregion_tuples
def get_watersheds(bioregion): if report_cache_exists(bioregion, 'watersheds'): watershed_tuples = get_report_cache(bioregion, 'watersheds') return watershed_tuples else: watersheds = Watersheds.objects.filter(geometry__bboverlaps=bioregion.output_geom) watershed_tuples = [(watershed.geometry.intersection(bioregion.output_geom).area, watershed.maj_name) for watershed in watersheds if watershed.geometry.intersects(bioregion.output_geom)] watershed_dict = {} for area,name in watershed_tuples: if name in watershed_dict.keys(): watershed_dict[name] += area else: watershed_dict[name] = area watershed_tuples = [(name, convert_float_to_area_display_units(area)) for name,area in watershed_dict.items()] watershed_tuples.sort() watershed_tuples = [(watershed_tuple[0], watershed_tuple[1], convert_sq_km_to_sq_mi(watershed_tuple[1])) for watershed_tuple in watershed_tuples] create_report_cache(bioregion, dict(watersheds=watershed_tuples)) return watershed_tuples
def get_ecoregions(bioregion): if report_cache_exists(bioregion, 'ecoregions'): ecoregion_tuples = get_report_cache(bioregion, 'ecoregions') return ecoregion_tuples else: ecoregions = EcoRegions.objects.filter(geometry__bboverlaps=bioregion.output_geom) ecoregion_tuples = [(ecoregion.geometry.intersection(bioregion.output_geom).area, ecoregion.eco_name) for ecoregion in ecoregions if ecoregion.geometry.intersects(bioregion.output_geom)] ecoregion_dict = {} for area,name in ecoregion_tuples: if name in ecoregion_dict.keys(): ecoregion_dict[name] += area else: ecoregion_dict[name] = area ecoregion_tuples = [(name, convert_float_to_area_display_units(area)) for name,area in ecoregion_dict.items()] ecoregion_tuples.sort() ecoregion_tuples = [(eco_tuple[0], eco_tuple[1], convert_sq_km_to_sq_mi(eco_tuple[1])) for eco_tuple in ecoregion_tuples] #ecoregion_names = [name for (area, name) in ecoregion_tuples] create_report_cache(bioregion, dict(ecoregions=ecoregion_tuples)) #just return the following for now (until we get caching in place) #ecoregion_names = ['Central and Southern Cascades forests', 'Central Pacific coastal forests', 'Willamette Valley forests', 'Puget lowland forests', 'Eastern Cascades forests', 'Klamath-Siskiyou forests', 'Snake-Columbia shrub steppe', 'Blue Mountains forests'] return ecoregion_tuples