def test_centroids_att_one_pass(self):
     """ Test set one attribute centroids """
     centr_bang = Centroids()
     centr_bang.set_raster_from_pnt_bounds((89, 21.5, 90, 23), 0.01)
     _set_centroids_att(centr_bang, dist_coast_decay=False, dem_product='SRTM3')
     self.assertEqual(centr_bang.dist_coast.size, 0)
     self.assertEqual(centr_bang.elevation.size, centr_bang.size)
Beispiel #2
0
    def _centroids_from_nc(file_name):
        """ Construct Centroids from the grid described by 'latitude' and
        'longitude' variables in a netCDF file.
        """
        LOGGER.info('Constructing centroids from %s', file_name)
        cent = Centroids()
        ncdf = xr.open_dataset(file_name)
        if hasattr(ncdf, 'latitude'):
            lats = ncdf.latitude.data
            lons = ncdf.longitude.data
        elif hasattr(ncdf, 'lat'):
            lats = ncdf.lat.data
            lons = ncdf.lon.data
        elif hasattr(ncdf, 'lat_1'):
            lats = ncdf.lat_1.data
            lons = ncdf.lon_1.data
        else:
            raise AttributeError('netcdf file has no field named latitude or '
                                 'other know abrivation for coordinates.')
        ncdf.close()

        lats, lons = np.array(
            [np.repeat(lats, len(lons)),
             np.tile(lons, len(lats))])
        cent = Centroids()
        cent.set_lat_lon(lats, lons)
        cent.set_area_pixel()
        cent.set_on_land()

        return cent
Beispiel #3
0
 def test_area_approx(self):
     """Test set_area_approx"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     with self.assertRaises(ValueError):
         centr.set_area_approx()
Beispiel #4
0
    def test_write_read_raster_h5(self):
        """Write and read hdf5 format"""
        file_name = str(DATA_DIR.joinpath('test_centr.h5'))

        centr = Centroids()
        xf_lat, xo_lon, d_lat, d_lon, n_lat, n_lon = 10, 5, -0.5, 0.2, 20, 25
        centr.set_raster_from_pix_bounds(xf_lat, xo_lon, d_lat, d_lon, n_lat,
                                         n_lon)
        centr.write_hdf5(file_name)

        centr_read = Centroids()
        centr_read.read_hdf5(file_name)
        self.assertTrue(centr_read.meta)
        self.assertFalse(centr_read.lat.size)
        self.assertFalse(centr_read.lon.size)
        self.assertEqual(centr_read.meta['width'], centr.meta['width'])
        self.assertEqual(centr_read.meta['height'], centr.meta['height'])
        self.assertAlmostEqual(centr_read.meta['transform'].a,
                               centr.meta['transform'].a)
        self.assertAlmostEqual(centr_read.meta['transform'].b,
                               centr.meta['transform'].b)
        self.assertAlmostEqual(centr_read.meta['transform'].c,
                               centr.meta['transform'].c)
        self.assertAlmostEqual(centr_read.meta['transform'].d,
                               centr.meta['transform'].d)
        self.assertAlmostEqual(centr_read.meta['transform'].e,
                               centr.meta['transform'].e)
        self.assertAlmostEqual(centr_read.meta['transform'].f,
                               centr.meta['transform'].f)
        self.assertTrue(
            u_coord.equal_crs(centr_read.meta['crs'], centr.meta['crs']))
Beispiel #5
0
    def test_set_vector_file_wrong_fail(self):
        """Test set_vector_file with wrong centroids"""
        shp_file = shapereader.natural_earth(resolution='110m',
                                             category='cultural',
                                             name='populated_places_simple')
        centr = Centroids()
        inten = centr.set_vector_file(shp_file, ['pop_min', 'pop_max'])

        self.assertEqual(CRS.from_user_input(centr.geometry.crs),
                         CRS.from_epsg(u_coord.NE_EPSG))
        self.assertEqual(centr.geometry.size, centr.lat.size)
        self.assertEqual(CRS.from_user_input(centr.geometry.crs),
                         CRS.from_epsg(u_coord.NE_EPSG))
        self.assertAlmostEqual(centr.lon[0], 12.453386544971766)
        self.assertAlmostEqual(centr.lon[-1], 114.18306345846304)
        self.assertAlmostEqual(centr.lat[0], 41.903282179960115)
        self.assertAlmostEqual(centr.lat[-1], 22.30692675357551)

        self.assertEqual(inten.shape, (2, 243))
        # population min
        self.assertEqual(inten[0, 0], 832)
        self.assertEqual(inten[0, -1], 4551579)
        # population max
        self.assertEqual(inten[1, 0], 832)
        self.assertEqual(inten[1, -1], 7206000)

        shp_file = shapereader.natural_earth(resolution='10m',
                                             category='cultural',
                                             name='populated_places_simple')
        with self.assertRaises(ValueError):
            centr.set_vector_file(shp_file, ['pop_min', 'pop_max'])
Beispiel #6
0
    def test_mat_global_pass(self):
        """Test read GLB_CENTROIDS_MAT"""
        centroids = Centroids()
        centroids.read_mat(GLB_CENTROIDS_MAT)

        self.assertEqual(centroids.region_id[1062443], 35)
        self.assertEqual(centroids.region_id[170825], 28)
Beispiel #7
0
    def __init__(self, haz_type):
        """Initialize values.

        Parameters:
            haz_type (str, optional): acronym of the hazard type (e.g. 'TC').

        Examples:
            Fill hazard values by hand:

            >>> haz = Hazard('TC')
            >>> haz.intensity = sparse.csr_matrix(np.zeros((2, 2)))
            >>> ...

            Take hazard values from file:

            >>> haz = Hazard('TC', HAZ_DEMO_MAT)
            >>> haz.read_mat(HAZ_DEMO_MAT, 'demo')

        """
        self.tag = TagHazard()
        self.tag.haz_type = haz_type
        self.units = ''
        self.centroids = Centroids()
        # following values are defined for each event
        self.event_id = np.array([], int)
        self.frequency = np.array([], float)
        self.event_name = list()
        self.date = np.array([], int)
        self.orig = np.array([], bool)
        # following values are defined for each event and centroid
        self.intensity = sparse.csr_matrix(np.empty(
            (0, 0)))  # events x centroids
        self.fraction = sparse.csr_matrix(np.empty(
            (0, 0)))  # events x centroids
Beispiel #8
0
 def test_dist_coast_pass(self):
     """Test set_dist_coast"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     centr.set_dist_coast()
     self.assertAlmostEqual(2594.2070842031694, centr.dist_coast[1])
     self.assertAlmostEqual(166295.87602398323, centr.dist_coast[-2])
Beispiel #9
0
 def test_region_id_pass(self):
     """Test set_region_id"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     centr.set_region_id()
     self.assertEqual(np.count_nonzero(centr.region_id), 6)
     self.assertEqual(centr.region_id[0], 52)  # 052 for barbados
 def test_dist_coast_pass(self):
     """ Test set_dist_coast """
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init':'epsg:4326'}
     centr.set_dist_coast()
     self.assertAlmostEqual(5.798819757520 * 1000, centr.dist_coast[1])
     self.assertAlmostEqual(166.3650542203 * 1000, centr.dist_coast[-2])
    def test_append_all_pass(self):
        """Test _append_all function."""
        haz_1 = Hazard('TC')
        haz_1.tag.file_name = 'file1.mat'
        haz_1.tag.description = 'Description 1'
        haz_1.centroids = Centroids()
        haz_1.centroids.set_lat_lon(np.array([1, 3, 5]), np.array([2, 4, 6]))
        haz_1.event_id = np.array([1])
        haz_1.event_name = ['ev1']
        haz_1.date = np.array([1])
        haz_1.orig = np.array([True])
        haz_1.frequency = np.array([1.0])
        haz_1.fraction = sparse.csr_matrix([[0.02, 0.03, 0.04]])
        haz_1.intensity = sparse.csr_matrix([[0.2, 0.3, 0.4]])
        haz_1.units = 'm/s'

        haz_2 = Hazard('TC')
        haz_2.tag.file_name = 'file2.mat'
        haz_2.tag.description = 'Description 2'
        haz_2.centroids = Centroids()
        haz_2.centroids.set_lat_lon(np.array([1, 3, 5]), np.array([2, 4, 6]))
        haz_2.event_id = np.array([1])
        haz_2.event_name = ['ev2']
        haz_2.date = np.array([2])
        haz_2.orig = np.array([False])
        haz_2.frequency = np.array([1.0])
        haz_2.fraction = sparse.csr_matrix([[1.02, 1.03, 1.04]])
        haz_2.intensity = sparse.csr_matrix([[1.2, 1.3, 1.4]])
        haz_2.units = 'm/s'

        haz = Hazard('TC')
        haz._append_all([haz_1, haz_2])


        hres_frac = sparse.csr_matrix([[0.02, 0.03, 0.04], \
                                        [1.02, 1.03, 1.04]])
        hres_inten = sparse.csr_matrix([[0.2, 0.3, 0.4], \
                                       [1.2, 1.3, 1.4]])

        self.assertTrue(sparse.isspmatrix_csr(haz.intensity))
        self.assertTrue(
            np.array_equal(haz.intensity.todense(), hres_inten.todense()))
        self.assertTrue(sparse.isspmatrix_csr(haz.fraction))
        self.assertTrue(
            np.array_equal(haz.fraction.todense(), hres_frac.todense()))
        self.assertEqual(haz.units, haz_2.units)
        self.assertTrue(np.array_equal(haz.frequency, np.array([1.0, 1.0])))
        self.assertTrue(np.array_equal(haz.orig, np.array([True, False])))
        self.assertTrue(np.array_equal(haz.date, np.array([1, 2])))
        self.assertTrue(np.array_equal(haz.event_id, np.array([1, 2])))
        self.assertTrue(haz.event_name, ['ev1', 'ev2'])
        self.assertTrue(
            np.array_equal(haz.centroids.coord, haz_1.centroids.coord))
        self.assertTrue(
            np.array_equal(haz.centroids.coord, haz_2.centroids.coord))
        self.assertTrue(haz.tag, 'file_1.mat + file_2.mat')
        self.assertTrue(haz.tag, 'Description 1 + Description 2')
Beispiel #12
0
 def test_get_pixel_polygons_pass(self):
     """Test calc_pixels_polygons"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     poly = centr.calc_pixels_polygons()
     self.assertIsInstance(poly[0], Polygon)
     self.assertTrue(np.allclose(poly.centroid[:].y.values, centr.lat))
     self.assertTrue(np.allclose(poly.centroid[:].x.values, centr.lon))
 def test_ne_crs_xy_pass(self):
     """ Test _ne_crs_xy """
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     lon, lat = centr._ne_crs_xy()
     self.assertAlmostEqual(4.51072194, lon[0])
     self.assertAlmostEqual(0.00011838, lat[0])
     self.assertAlmostEqual(4.5107354, lon[-1])
     self.assertAlmostEqual(0.0001297, lat[-1])
    def test_mat_global_pass(self):
        """ Test read GLB_CENTROIDS_MAT """
        centroids = Centroids()
        centroids.read_mat(GLB_CENTROIDS_MAT)

        self.assertEqual(centroids.region_id[1062443], 35)
        self.assertEqual(centroids.region_id[170825], 28)
        self.assertAlmostEqual(centroids.dist_coast[9], 21.366461094662913)
        self.assertAlmostEqual(centroids.dist_coast[1568370], 36.76908653021)
Beispiel #15
0
 def test_equal_pass(self):
     """Test equal"""
     centr_ras = Centroids.from_raster_file(HAZ_DEMO_FL,
                                            window=Window(0, 0, 50, 60))
     centr_bis = Centroids.from_raster_file(HAZ_DEMO_FL,
                                            window=Window(51, 61, 10, 10))
     self.assertFalse(centr_ras.equal(centr_bis))
     self.assertFalse(centr_bis.equal(centr_ras))
     self.assertTrue(centr_ras.equal(centr_ras))
     self.assertTrue(centr_bis.equal(centr_bis))
Beispiel #16
0
 def test_ne_crs_geom_pass(self):
     """Test _ne_crs_geom"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     xy_vec = centr._ne_crs_geom()
     lon, lat = xy_vec.geometry[:].x.values, xy_vec.geometry[:].y.values
     self.assertAlmostEqual(4.51072194, lon[0])
     self.assertAlmostEqual(0.00011838, lat[0])
     self.assertAlmostEqual(4.5107354, lon[-1])
     self.assertAlmostEqual(0.0001297, lat[-1])
    def test_centroids_resolution_pass(self):
        """ Test _centroids_resolution """
        bf = BushFire()
        res_centr = bf._centroids_resolution(DEF_CENTROIDS[0])
        res = get_resolution(DEF_CENTROIDS[0].lat, DEF_CENTROIDS[0].lon)
        self.assertAlmostEqual((res[0] + res[1]) / 2, res_centr)

        centroids = Centroids()
        centroids.meta = {'transform': Affine(0.5, 0, -180, 0, -0.5, 90)}
        res_centr = bf._centroids_resolution(centroids)
        self.assertAlmostEqual(0.5, res_centr)
Beispiel #18
0
    def test_mat_pass(self):
        """Read a centroid mat file correctly."""
        centroids = Centroids()
        centroids.read_mat(HAZ_TEST_MAT)

        n_centroids = 100
        self.assertEqual(centroids.coord.shape, (n_centroids, 2))
        self.assertEqual(centroids.coord[0][0], 21)
        self.assertEqual(centroids.coord[0][1], -84)
        self.assertEqual(centroids.coord[n_centroids - 1][0], 30)
        self.assertEqual(centroids.coord[n_centroids - 1][1], -75)
Beispiel #19
0
 def test_get_closest_point(self):
     """Test get_closest_point"""
     centr = Centroids()
     centr.lat, centr.lon, centr.geometry = self.data_vector()
     centr.geometry.crs = {'init': 'epsg:4326'}
     x, y, idx = centr.get_closest_point(-58.13, 14.38)
     self.assertAlmostEqual(x, -58.125)
     self.assertAlmostEqual(y, 14.375)
     self.assertEqual(idx, 295)
     self.assertEqual(centr.lon[idx], x)
     self.assertEqual(centr.lat[idx], y)
Beispiel #20
0
    def test_centroid_pass(self):
        """Read a centroid excel file correctly."""
        centroids = Centroids()
        centroids.read_excel(HAZ_TEMPLATE_XLS)

        n_centroids = 45
        self.assertEqual(centroids.coord.shape[0], n_centroids)
        self.assertEqual(centroids.coord.shape[1], 2)
        self.assertEqual(centroids.coord[0][0], -25.95)
        self.assertEqual(centroids.coord[0][1], 32.57)
        self.assertEqual(centroids.coord[n_centroids - 1][0], -24.7)
        self.assertEqual(centroids.coord[n_centroids - 1][1], 33.88)
Beispiel #21
0
    def test_union_meta(self):
        cent1 = Centroids.from_pnt_bounds((-1, -1, 0, 0), res=1)
        cent2 = Centroids.from_pnt_bounds((0, 0, 1, 1), res=1)
        cent3 = Centroids.from_lat_lon(np.array([1]), np.array([1]))

        cent = cent1.union(cent2)
        np.testing.assert_array_equal(cent.lat, [0, 0, -1, -1, 1, 1, 0])
        np.testing.assert_array_equal(cent.lon, [-1, 0, -1, 0, 0, 1, 1])

        cent = cent3.union(cent1)
        np.testing.assert_array_equal(cent.lat, [1, 0, 0, -1, -1])
        np.testing.assert_array_equal(cent.lon, [1, -1, 0, -1, 0])
Beispiel #22
0
 def test_area_pass(self):
     """ Test set_area """
     centr_ras = Centroids()
     centr_ras.set_raster_file(HAZ_DEMO_FL, window= Window(0, 0, 50, 60))
     centr_ras.meta['crs'] = {'proj':'cea'}
     centr_ras.set_area_pixel()
     centr_ras.check()
     self.assertTrue(np.allclose(centr_ras.area_pixel,
                                 np.ones(60*50)*0.009000000000000341*0.009000000000000341))
Beispiel #23
0
    def test_write_read_points_h5(self):
        file_name = str(DATA_DIR.joinpath('test_centr.h5'))

        centr = Centroids.from_lat_lon(VEC_LAT, VEC_LON)
        centr.write_hdf5(file_name)

        centr_read = Centroids.from_hdf5(file_name)
        self.assertFalse(centr_read.meta)
        self.assertTrue(centr_read.lat.size)
        self.assertTrue(centr_read.lon.size)
        self.assertTrue(np.allclose(centr_read.lat, centr.lat))
        self.assertTrue(np.allclose(centr_read.lon, centr.lon))
        self.assertTrue(u_coord.equal_crs(centr_read.crs, centr.crs))
Beispiel #24
0
 def test_read_all_pass(self):
     """ Test centr_ras data """
     centr_ras = Centroids()
     inten_ras = centr_ras.set_raster_file(HAZ_DEMO_FL, window= Window(0, 0, 50, 60))
     self.assertAlmostEqual(centr_ras.meta['crs'], DEF_CRS)
     self.assertAlmostEqual(centr_ras.meta['transform'].c, -69.33714959699981)
     self.assertAlmostEqual(centr_ras.meta['transform'].a, 0.009000000000000341)
     self.assertAlmostEqual(centr_ras.meta['transform'].b, 0.0)
     self.assertAlmostEqual(centr_ras.meta['transform'].f, 10.42822096697894)
     self.assertAlmostEqual(centr_ras.meta['transform'].d, 0.0)
     self.assertAlmostEqual(centr_ras.meta['transform'].e, -0.009000000000000341)
     self.assertEqual(centr_ras.meta['height'], 60)
     self.assertEqual(centr_ras.meta['width'], 50)
     self.assertEqual(inten_ras.shape, (1, 60*50))
Beispiel #25
0
 def test_on_land(self):
     """ Test set_on_land """
     centr_ras = Centroids()
     centr_ras.set_raster_file(HAZ_DEMO_FL, window= Window(0, 0, 50, 60))
     centr_ras.set_on_land()
     centr_ras.check()
     self.assertTrue(np.array_equal(centr_ras.on_land, np.ones(60 * 50, bool)))
Beispiel #26
0
    def test_read_with_cent(self):
        """ Test read_footprints while passing in a Centroids object """
        var_names = copy.deepcopy(DEF_VAR_EXCEL)
        var_names['sheet_name'] = 'fp_centroids-test'
        var_names['col_name']['region_id'] = 'iso_n3'
        test_centroids = Centroids()
        test_centroids.read_excel(os.path.join(DATA_DIR,
                                               'fp_centroids-test.xls'),
                                  var_names=var_names)
        storms = StormEurope()
        storms.read_footprints(TEST_NCS, centroids=test_centroids)

        self.assertEqual(storms.intensity.shape, (2, 9944))
        self.assertEqual(
            np.count_nonzero(~np.isnan(storms.centroids.region_id)), 6401)
Beispiel #27
0
 def test_dist_coast_pass(self):
     """Test set_region_id"""
     centr_ras = Centroids()
     centr_ras.set_raster_file(HAZ_DEMO_FL, window=Window(0, 0, 50, 60))
     centr_ras.set_dist_coast()
     centr_ras.check()
     self.assertTrue(abs(centr_ras.dist_coast[0] - 117000) < 1000)
     self.assertTrue(abs(centr_ras.dist_coast[-1] - 104000) < 1000)
Beispiel #28
0
 def test_set_raster_pnt_pass(self):
     """Test set_raster_from_pnt_bounds from point borders"""
     centr = Centroids()
     left, bottom, right, top = 5, 0, 10, 10
     centr.set_raster_from_pnt_bounds((left, bottom, right, top), 0.2)
     self.assertEqual(centr.meta['crs'], DEF_CRS)
     self.assertEqual(centr.meta['width'], 26)
     self.assertEqual(centr.meta['height'], 51)
     self.assertAlmostEqual(centr.meta['transform'][0], 0.2)
     self.assertAlmostEqual(centr.meta['transform'][1], 0.0)
     self.assertAlmostEqual(centr.meta['transform'][2], 5 - 0.2 / 2)
     self.assertAlmostEqual(centr.meta['transform'][3], 0.0)
     self.assertAlmostEqual(centr.meta['transform'][4], -0.2)
     self.assertAlmostEqual(centr.meta['transform'][5], 10 + 0.2 / 2)
     self.assertTrue('lat' in centr.__dict__.keys())
     self.assertTrue('lon' in centr.__dict__.keys())
Beispiel #29
0
    def test_set_lat_lon_to_meta_pass(self):
        """Test set_lat_lon_to_meta"""
        centr = Centroids()
        centr.lat, centr.lon, centr.geometry = self.data_vector()
        centr.geometry.crs = {'init': 'epsg:4326'}

        centr.set_lat_lon_to_meta()
        self.assertEqual(centr.meta['crs'], {'init': 'epsg:4326'})
        self.assertEqual(centr.meta['width'], 36)
        self.assertEqual(centr.meta['height'], 31)
        self.assertEqual(centr.meta['transform'][1], 0.0)
        self.assertEqual(centr.meta['transform'][3], 0.0)
        self.assertAlmostEqual(centr.meta['transform'][0], 0.08333333)
        self.assertAlmostEqual(centr.meta['transform'][2], -61.08333333)
        self.assertAlmostEqual(centr.meta['transform'][4], 0.08333333)
        self.assertAlmostEqual(centr.meta['transform'][5], 11.83333333)
Beispiel #30
0
    def test_from_raster_file_wrong_fail(self):
        """Test from_raster_file with wrong centroids"""
        centr = Centroids.from_raster_file(HAZ_DEMO_FL,
                                           window=Window(10, 20, 50, 60))
        self.assertAlmostEqual(centr.meta['crs'], DEF_CRS)
        self.assertAlmostEqual(centr.meta['transform'].c, -69.2471495969998)
        self.assertAlmostEqual(centr.meta['transform'].a, 0.009000000000000341)
        self.assertAlmostEqual(centr.meta['transform'].b, 0.0)
        self.assertAlmostEqual(centr.meta['transform'].f, 10.248220966978932)
        self.assertAlmostEqual(centr.meta['transform'].d, 0.0)
        self.assertAlmostEqual(centr.meta['transform'].e,
                               -0.009000000000000341)
        self.assertEqual(centr.meta['height'], 60)
        self.assertEqual(centr.meta['width'], 50)

        inten_ras = centr.values_from_raster_files([HAZ_DEMO_FL],
                                                   window=Window(
                                                       10, 20, 50, 60))
        self.assertEqual(inten_ras.shape, (1, 60 * 50))
        self.assertAlmostEqual(
            inten_ras.reshape((60, 50)).tocsr()[25, 12], 0.056825936)

        with self.assertRaises(ValueError):
            centr.values_from_raster_files([HAZ_DEMO_FL],
                                           window=Window(10, 20, 52, 60))