def get_nightlight(ref_year, cntry_info, res_km=None, from_hr=None): """Obtain nightlight from different sources depending on reference year. Compute resolution factor used at resampling depending on source. Parameters: ref_year (int): reference year cntry_info (dict): key = ISO alpha_3 country, value = [country id, country name, country geometry] res_km (float): approx resolution in km. from_hr (bool, optional): Returns: nightlight (sparse.csr_matrix), coord_nl (np.array), fn_nl (str), res_fact (float) """ if from_hr is None and ref_year > 2013: from_hr = True elif from_hr is None and ref_year <= 2013: from_hr = False if from_hr: if not res_km: res_km = 0.5 nl_year = ref_year if ref_year > 2013: nl_year = 2016 else: nl_year = 2012 LOGGER.info("Nightlights from NASA's earth observatory for year %s.", str(nl_year)) res_fact = DEF_RES_NASA_KM / res_km geom = [info[2] for info in cntry_info.values()] geom = shapely.ops.cascaded_union(geom) req_files = nl_utils.check_required_nl_files(geom.bounds) files_exist, _ = nl_utils.check_nl_local_file_exists( req_files, SYSTEM_DIR, nl_year) nl_utils.download_nl_files(req_files, files_exist, SYSTEM_DIR, nl_year) # nightlight intensity with 15 arcsec resolution nightlight, coord_nl = nl_utils.load_nightlight_nasa( geom.bounds, req_files, nl_year) fn_nl = [ file.replace('*', str(nl_year)) for idx, file in enumerate(nl_utils.BM_FILENAMES) if req_files[idx] ] fn_nl = ' + '.join(fn_nl) else: if not res_km: res_km = 1.0 nl_year = ref_year if ref_year < 1992: nl_year = 1992 elif ref_year > 2013: nl_year = 2013 LOGGER.info( "Nightlights from NOAA's earth observation group for year %s.", str(nl_year)) res_fact = DEF_RES_NOAA_KM / res_km # nightlight intensity with 30 arcsec resolution nightlight, coord_nl, fn_nl = nl_utils.load_nightlight_noaa(nl_year) return nightlight, coord_nl, fn_nl, res_fact, res_km
def test_load_noaa_pass(self): """Test load_nightlight_noaa function.""" nightlight, coord_nl, fn_nl = load_nightlight_noaa(2013) self.assertEqual(coord_nl[0, 0], NOAA_BORDER[1]) self.assertEqual(coord_nl[1, 0], NOAA_BORDER[0]) self.assertEqual(coord_nl[0, 0]+(nightlight.shape[0]-1)*coord_nl[0,1], NOAA_BORDER[3]) self.assertEqual(coord_nl[1, 0]+(nightlight.shape[1]-1)*coord_nl[1,1], NOAA_BORDER[2])