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))
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)
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