Esempio n. 1
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)
Esempio n. 2
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])
 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])
Esempio n. 4
0
    def _centroids_creation(firms, centr_res_factor):
        """ Compute centroids for the firms dataset.
            The number of centroids is defined according to the data resolution.

        Parameters:
            firms (dataframe): dataset obtained from FIRMS data
            centr_res_factor (float): the factor applied to voluntarly decrease/increase
                the centroids resolution

        Returns:
            centroids (Centroids)
            res_data (float): data resolution (km)
        """

        LOGGER.info('Defining the resolution of the centroids.')
        # Resolution of the centroids depends on the data origin.
        # Resolution in km.
        if 'instrument' in firms.columns:
            if firms['instrument'].any() == 'MODIS':
                res_data = 1.0
            else:
                res_data = 0.375 # For VIIRS data
        else:
            res_data = RES_DATA # For undefined data origin, defined by user

        LOGGER.info('Computing centroids.')
        centroids = Centroids()
        dlat_km = abs(firms['latitude'].min() - firms['latitude'].max()) * ONE_LAT_KM
        dlon_km = abs(firms['longitude'].min() - firms['longitude'].max()) * ONE_LAT_KM* \
            np.cos(np.radians((abs(firms['latitude'].min() - firms['latitude'].max()))/2))
        nb_centr_lat = int(dlat_km/res_data * centr_res_factor)
        nb_centr_lon = int(dlon_km/res_data * centr_res_factor)
        coord = (np.mgrid[firms['latitude'].min() : firms['latitude'].max() : \
            complex(0, nb_centr_lat), firms['longitude'].min() : firms['longitude'].max() : \
            complex(0, nb_centr_lon)]).reshape(2, nb_centr_lat*nb_centr_lon).transpose()
        centroids.set_lat_lon(coord[:, 0], coord[:, 1])

#        centroids.set_raster_from_pnt_bounds((firms['longitude'].min(),
#        firms['latitude'].min(), firms['longitude'].max(), firms['latitude'].max()),
#        res=res_data/centr_res_factor)    ---> propagation works?

        # Calculate the area attributed to each centroid
        centroids.set_area_approx()
        # Calculate if the centroids is on land or not
        centroids.set_on_land()
        # Calculate to distance to coast
        centroids.set_dist_coast()
        # Create on land grid
        centroids.land = centroids.on_land.reshape((nb_centr_lat, nb_centr_lon)).astype(int)
        centroids.nb_centr_lat = nb_centr_lat
        centroids.nb_centr_lon = nb_centr_lon
        centroids.empty_geometry_points()
        return centroids, res_data