Пример #1
0
    def test_cut_country_brb_2km_pass(self):
        """Test _resample_land function with fake Barbados."""
        country_iso = 'BRB'
        for cntry in list(SHP_FILE.records()):
            if cntry.attributes['ADM0_A3'] == country_iso:
                geom = cntry.geometry
        nightlight = np.ones((500, 1000))
        nightlight[275:281, 333:334] = 0.4
        nightlight[275:281, 334:336] = 0.5
        nightlight = sparse.csr_matrix(nightlight)

        coord_nl = np.empty((2, 2))
        coord_nl[0, :] = [NOAA_BORDER[1] + NOAA_RESOLUTION_DEG,
                          0.2805444221776838]
        coord_nl[1, :] = [NOAA_BORDER[0] + NOAA_RESOLUTION_DEG,
                          0.3603520186853473]

        res_fact = 2.0
        nightlight_reg, lat_reg, lon_reg, on_land = _cut_country(geom, nightlight, coord_nl)
        nightlight_res, lat_res, lon_res = _resample_land(geom, nightlight_reg, lat_reg, lon_reg,
                                                          res_fact, on_land)

        lat_ref = np.array([
            [12.9996827, 12.9996827, 12.9996827, 12.9996827, 12.9996827, 12.9996827],
            [13.11190047, 13.11190047, 13.11190047, 13.11190047, 13.11190047, 13.11190047],
            [13.22411824, 13.22411824, 13.22411824, 13.22411824, 13.22411824, 13.22411824],
            [13.33633601, 13.33633601, 13.33633601, 13.33633601, 13.33633601, 13.33633601],
            [13.44855377, 13.44855377, 13.44855377, 13.44855377, 13.44855377, 13.44855377],
            [13.56077154, 13.56077154, 13.56077154, 13.56077154, 13.56077154, 13.56077154]
        ])

        lon_ref = np.array([
            [-59.99444444, -59.85030364, -59.70616283, -59.56202202, -59.41788121, -59.27374041],
            [-59.99444444, -59.85030364, -59.70616283, -59.56202202, -59.41788121, -59.27374041],
            [-59.99444444, -59.85030364, -59.70616283, -59.56202202, -59.41788121, -59.27374041],
            [-59.99444444, -59.85030364, -59.70616283, -59.56202202, -59.41788121, -59.27374041],
            [-59.99444444, -59.85030364, -59.70616283, -59.56202202, -59.41788121, -59.27374041],
            [-59.99444444, -59.85030364, -59.70616283, -59.56202202, -59.41788121, -59.27374041]
        ])

        on_ref = np.array([
            [False, False, False, False, False, False],
            [False, False, False, True, False, False],
            [False, False, False, True, False, False],
            [False, False, False, False, False, False],
            [False, False, False, False, False, False],
            [False, False, False, False, False, False]
        ])

        self.assertTrue(np.allclose(lat_ref[on_ref], lat_res))
        self.assertTrue(np.allclose(lon_ref[on_ref], lon_res))
        self.assertAlmostEqual(nightlight_res[0], 0.1683201638775818)
        self.assertAlmostEqual(nightlight_res[1], 0.33167983612241814)
    def test_cut_country_brb_1km_pass(self):
        """ Test _cut_country function with fake Barbados."""
        country_iso = 'BRB'
        for cntry in list(SHP_FILE.records()):
            if cntry.attributes['ADM0_A3'] == country_iso:
                geom = cntry.geometry
        nightlight = sparse.lil.lil_matrix(np.ones((500, 1000)))
        nightlight[275:281, 333:334] = 0.4
        nightlight[275:281, 334:336] = 0.5
        nightlight = nightlight.tocsr()

        coord_nl = np.empty((2, 2))
        coord_nl[0, :] = [
            NOAA_BORDER[1] + NOAA_RESOLUTION_DEG, 0.2805444221776838
        ]
        coord_nl[1, :] = [
            NOAA_BORDER[0] + NOAA_RESOLUTION_DEG, 0.3603520186853473
        ]

        nightlight_reg, lat_reg, lon_reg, on_land = _cut_country(
            geom, nightlight, coord_nl)

        lat_ref = np.array([[12.9996827, 12.9996827, 12.9996827],
                            [13.28022712, 13.28022712, 13.28022712],
                            [13.56077154, 13.56077154, 13.56077154]])
        lon_ref = np.array([[-59.99444444, -59.63409243, -59.27374041],
                            [-59.99444444, -59.63409243, -59.27374041],
                            [-59.99444444, -59.63409243, -59.27374041]])
        on_ref = np.array([[False, False, False], [False, True, False],
                           [False, False, False]])

        in_lat = (278, 280)
        in_lon = (333, 335)
        nightlight_ref = nightlight[in_lat[0]:in_lat[1] + 1,
                                    in_lon[0]:in_lon[1] + 1].todense()
        nightlight_ref[np.logical_not(on_ref)] = 0.0

        self.assertTrue(np.allclose(lat_ref, lat_reg))
        self.assertTrue(np.allclose(lon_ref, lon_reg))
        self.assertTrue(np.allclose(on_ref, on_land))
        self.assertTrue(np.allclose(nightlight_ref, nightlight_reg))