示例#1
0
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])