def calc_tc(expo_dict, tracks, data_dir): """ Compute tropical cyclone events from tracks at every island group, if not contained in data_dir. """ try: abs_path = os.path.join(data_dir, 'tc_isl.p') with open(abs_path, 'rb') as f: tc_dict = pickle.load(f) print('Loaded tc_isl:', len(tc_dict)) except FileNotFoundError: all_isl = BlackMarble() for ent_iso, ent_val in expo_dict.items(): all_isl.append(ent_val) centr = Centroids() centr.coord = all_isl.coord centr.id = np.arange(centr.lat.size) + 1 centr.region_id = all_isl.region_id tc = TropCyclone() tc.set_from_tracks(tracks, centr) tc_dict = dict() for ent_iso, ent_val in expo_dict.items(): reg_id = np.unique(ent_val.region_id)[0] tc_dict[ent_iso] = tc.select(reg_id=reg_id) save(os.path.join(data_dir, 'tc_isl.p'), tc_dict) return tc_dict
def centroids(self, latlon=None, res_as=360): """Return centroids in this region Parameters ---------- latlon : pair (lat, lon), optional Latitude and longitude of centroids. If not given, values are taken from CLIMADA's base grid (see `res_as`). res_as : int, optional One of 150 or 360. When `latlon` is not given, choose coordinates from centroids according to CLIMADA's base grid of given resolution in arc-seconds. Default: 360. Returns ------- centroids : climada.hazard.Centroids object """ if latlon is None: centroids = Centroids.from_base_grid(res_as=res_as) centroids.set_meta_to_lat_lon() lat, lon = centroids.lat, centroids.lon else: lat, lon = latlon centroids = Centroids() centroids.set_lat_lon(lat, lon) msk = shapely.vectorized.contains(self.shape, lon, lat) centroids = centroids.select(sel_cen=msk) centroids.id = np.arange(centroids.lon.shape[0]) return centroids
def irma_tc(exp, data_irma): centr = Centroids() centr.coord = exp.coord centr.id = np.arange(centr.lat.size) tc_irma = TropCyclone() data_irma.equal_timestep(0.1) tc_irma.set_from_tracks(data_irma, centr) return tc_irma
def irma_tc(exp, data_irma): centr = Centroids() centr.coord = np.zeros((exp.latitude.size, 2)) centr.coord[:, 0] = exp.latitude centr.coord[:, 1] = exp.longitude centr.id = np.arange(centr.lat.size) tc_irma = TropCyclone() data_irma.equal_timestep(0.1) tc_irma.set_from_tracks(data_irma, centr) return tc_irma