Esempio n. 1
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()
Esempio n. 2
0
 def test_area_approx(self):
     """ Test set_area_approx """
     centr_ras = Centroids()
     centr_ras.set_raster_file(HAZ_DEMO_FL, window= Window(0, 0, 50, 60))
     centr_ras.set_area_approx()
     approx_dim = centr_ras.meta['transform'][0]*111*1000*centr_ras.meta['transform'][0]*111*1000
     self.assertEqual(centr_ras.area_pixel.size, centr_ras.size)
     self.assertEqual(np.unique(centr_ras.area_pixel).size, 60)
     self.assertTrue(np.array_equal((approx_dim/np.unique(centr_ras.area_pixel)).astype(int),
                                    np.ones(60)))
Esempio n. 3
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
Esempio n. 4
0
def def_ori_centroids(min_lon, min_lat, max_lon, max_lat, centr_res_factor):

    res_data = 0.375  # For VIIRS data

    centroids = Centroids()
    dlat_km = abs(min_lat - max_lat) * ONE_LAT_KM
    dlon_km = abs(min_lon - max_lon) * ONE_LAT_KM * np.cos(
        np.radians((abs(min_lat - max_lat)) / 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[min_lat : max_lat : complex(0, nb_centr_lat), \
             min_lon : max_lon : complex(0, nb_centr_lon)]). \
             reshape(2, nb_centr_lat*nb_centr_lon).transpose()
    centroids.set_lat_lon(coord[:, 0], coord[:, 1])

    # Calculate the area attributed to each centroid
    centroids.set_area_approx()
    # Calculate if the centroids is on land or not
    centroids.set_on_land()
    # Create on land grid
    centroids.empty_geometry_points()
    return centroids
Esempio n. 5
0
    def _centroids_creation(firms, res_data, centr_res_factor):
        """ Get centroids from the firms dataset and refactor them.

        Parameters:
            firms (DataFrame): dataset obtained from FIRMS data
            res_data (float): FIRMS instrument resolution in degrees
            centr_res_factor (float): the factor applied to voluntarly decrease/increase
                the centroids resolution

        Returns:
            centroids (Centroids)
        """
        centroids = Centroids()
        centroids.set_raster_from_pnt_bounds((firms['longitude'].min(), \
            firms['latitude'].min(), firms['longitude'].max(), \
            firms['latitude'].max()), res=res_data/centr_res_factor)
        centroids.set_meta_to_lat_lon()
        centroids.set_area_approx()
        centroids.set_on_land()
        centroids.empty_geometry_points()

        return centroids
def def_ori_centroids(firms, centr_res_factor):
    # res_data in km
    if firms['instrument'].any() == 'MODIS':
        res_data = 1.0
    else:
        res_data = 0.375  # For VIIRS data

    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_area_approx()
    centroids.set_on_land()
    centroids.empty_geometry_points()
    return centroids, res_data