Exemple #1
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
 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))
Exemple #3
0
    def test_set_lat_lon_pass(self):
        """Test set_lat_lon"""
        centr = Centroids()
        centr.set_lat_lon(VEC_LAT, VEC_LON)
        self.assertTrue(np.allclose(centr.lat, VEC_LAT))
        self.assertTrue(np.allclose(centr.lon, VEC_LON))
        self.assertEqual(centr.crs, DEF_CRS)
        self.assertEqual(centr.geometry.crs, DEF_CRS)
        self.assertEqual(centr.geometry.size, 0)

        centr.set_area_pixel()
        self.assertEqual(centr.geometry.size, centr.lat.size)
Exemple #4
0
    def test_area_pass(self):
        """Test set_area"""
        ulx, xres, lrx = 60, 1, 90
        uly, yres, lry = 0, 1, 20
        xx, yy = np.meshgrid(np.arange(ulx + xres / 2, lrx, xres),
                             np.arange(uly + yres / 2, lry, yres))
        vec_data = gpd.GeoDataFrame(crs={'proj': 'cea'})
        vec_data['geometry'] = list(zip(xx.flatten(), yy.flatten()))
        vec_data['geometry'] = vec_data['geometry'].apply(Point)
        vec_data['lon'] = xx.flatten()
        vec_data['lat'] = yy.flatten()

        centr = Centroids()
        centr.set_lat_lon(vec_data.lat.values, vec_data.lon.values)
        centr.geometry = vec_data.geometry
        centr.set_area_pixel()
        self.assertTrue(np.allclose(centr.area_pixel, np.ones(centr.size)))
    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)
        create_meshgrid = True
        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'):
            if len(ncdf.lon_1.shape)>1 & \
                (ncdf.lon_1.shape == ncdf.lat_1.shape) \
                :
                lats = ncdf.lat_1.data.flatten()
                lons = ncdf.lon_1.data.flatten()
                create_meshgrid = False
            else:
                lats = ncdf.lat_1.data
                lons = ncdf.lon_1.data
        elif hasattr(ncdf, 'clat'):
            lats = ncdf.clat.data
            lons = ncdf.clon.data
            if ncdf.clat.attrs['units'] == 'radian':
                lats = np.rad2deg(lats)
                lons = np.rad2deg(lons)
            create_meshgrid = False
        else:
            raise AttributeError('netcdf file has no field named latitude or '
                                 'other know abrivation for coordinates.')
        ncdf.close()

        if create_meshgrid:
            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