def demo_arctic_proj(): rll = RotatedLatLon(lon1=60, lat1=90, lon2=-30, lat2=0) print(rll.get_north_pole_coords(), rll.get_true_pole_coords_in_rotated_system()) pass
def plot_only_vegetation_fractions( data_path="/RESCUE/skynet3_rech1/huziy/geof_lake_infl_exp/geophys_Quebec_0.1deg_260x260_with_dd_v6_with_ITFS", canopy_name="VF", label="QC_10km"): r = RPN(data_path) veg_fractions = r.get_2D_field_on_all_levels(name=canopy_name) print(list(veg_fractions.keys())) proj_params = r.get_proj_parameters_for_the_last_read_rec() lons, lats = r.get_longitudes_and_latitudes_for_the_last_read_rec() print(lons.shape) rll = RotatedLatLon(lon1=proj_params["lon1"], lat1=proj_params["lat1"], lon2=proj_params["lon2"], lat2=proj_params["lat2"]) lon0, lat0 = rll.get_true_pole_coords_in_rotated_system() plon, _ = rll.get_north_pole_coords() b = Basemap(projection="rotpole", llcrnrlon=lons[0, 0], llcrnrlat=lats[0, 0], urcrnrlon=lons[-1, -1], urcrnrlat=lats[-1, -1], lon_0=lon0 - 180, o_lon_p=lon0, o_lat_p=lat0) lons[lons > 180] -= 360 for lev in list(veg_fractions.keys()): veg_fractions[lev] = maskoceans(lons, lats, veg_fractions[lev], inlands=False) x, y = b(lons, lats) plot_veg_fractions(x, y, b, veg_fractions, out_image=os.path.join(os.path.dirname(data_path), "veg_fractions_{0}.png".format(label)))
def get_default_basemap_for_glk(lons, lats, resolution = "c"): rll = RotatedLatLon(lon1=domprops.lon1, lat1 = domprops.lat1, lon2=domprops.lon2, lat2=domprops.lat2) lonp, latp = rll.get_north_pole_coords() lon0, _ = rll.get_true_pole_coords_in_rotated_system() return Basemap( projection="rotpole", llcrnrlon=lons[0, 0], llcrnrlat=lats[0, 0], urcrnrlon=lons[-1, -1], urcrnrlat=lats[-1, -1], lon_0=lon0 - 180, o_lon_p = lonp, o_lat_p = latp, resolution=resolution )
def main(base_folder="/skynet3_rech1/huziy/veg_fractions/", fname="pm1983120100_00000000p", canopy_name="Y2C", label="USGS", depth_to_bedrock_name="8L" ): data_path = os.path.join(base_folder, fname) r = RPN(data_path) veg_fractions = r.get_2D_field_on_all_levels(name=canopy_name) print(list(veg_fractions.keys())) sand = r.get_first_record_for_name("SAND") clay = r.get_first_record_for_name("CLAY") dpth_to_bedrock = r.get_first_record_for_name(depth_to_bedrock_name) proj_params = r.get_proj_parameters_for_the_last_read_rec() lons, lats = r.get_longitudes_and_latitudes_for_the_last_read_rec() print(lons.shape) rll = RotatedLatLon(lon1=proj_params["lon1"], lat1=proj_params["lat1"], lon2=proj_params["lon2"], lat2=proj_params["lat2"]) lon0, lat0 = rll.get_true_pole_coords_in_rotated_system() plon, _ = rll.get_north_pole_coords() b = Basemap(projection="rotpole", llcrnrlon=lons[0, 0], llcrnrlat=lats[0, 0], urcrnrlon=lons[-1, -1], urcrnrlat=lats[-1, -1], lon_0=lon0 - 180, o_lon_p=lon0, o_lat_p=lat0) lons[lons > 180] -= 360 for lev in list(veg_fractions.keys()): veg_fractions[lev] = maskoceans(lons, lats, veg_fractions[lev], inlands=False) sand = maskoceans(lons, lats, sand) clay = maskoceans(lons, lats, clay) dpth_to_bedrock = maskoceans(lons, lats, dpth_to_bedrock) x, y = b(lons, lats) plot_veg_fractions(x, y, b, veg_fractions, out_image=os.path.join(base_folder, "veg_fractions_{0}.jpeg".format(label))) plot_sand_and_clay(x, y, b, sand, clay, out_image=os.path.join(base_folder, "sand_clay_{0}.jpeg".format(label))) # set relation between vegetation frsction fields and names veg_fract_dict = {} for lev, the_field in veg_fractions.items(): lev = int(lev) if lev not in y2c_level_to_title: continue veg_fract_dict[y2c_level_to_title[lev]] = the_field data = { "SAND": sand, "CLAY": clay, "BDRCK_DEPTH": dpth_to_bedrock } data.update(veg_fract_dict) return b, lons, lats, data, label
def get_arctic_basemap(lons2d, lats2d, lon1=60, lat1=90, lon2=-30, lat2=0, resolution="l"): rll = RotatedLatLon(lon1=lon1, lat1=lat1, lon2=lon2, lat2=lat2) rplon, rplat = rll.get_north_pole_coords() lon_0, lat_0 = rll.get_true_pole_coords_in_rotated_system() basemap = Basemap(projection="rotpole", o_lon_p=rplon, o_lat_p=rplat, lon_0=lon_0 - 180, llcrnrlon=lons2d[0, 0], llcrnrlat=lats2d[0, 0], urcrnrlon=lons2d[-1, -1], urcrnrlat=lats2d[-1, -1], resolution=resolution, round=True) return basemap
def main(path="/skynet3_rech1/huziy/gemclim_settings.nml"): params = _parse_parameters(path) print(params) ni, nj = 140, 140 # params[Grd_ni_name], params[Grd_nj_name] dx, dy = params[Grd_dx_name], params[Grd_dy_name] iRef, jRef = params[Grd_iref_name] - 1, params[Grd_jref_name] - 1 lonRef, latRef = params[Grd_lonr_name], params[Grd_latr_name] lon1, lat1 = params[Grd_xlon1_name], params[Grd_xlat1_name] lon2, lat2 = params[Grd_xlon2_name], params[Grd_xlat2_name] lons_rot = np.arange(lonRef + (0 - iRef) * dx, lonRef + (ni - iRef) * dx, dx) lats_rot = np.arange(latRef + (0 - jRef) * dy, latRef + (nj - jRef) * dy, dy) lats_rot, lons_rot = np.meshgrid(lats_rot, lons_rot) print(lats_rot.shape) # lons_rot[lons_rot > 180] -= 360 rll = RotatedLatLon(lon1=lon1, lat1=lat1, lon2=lon2, lat2=lat2) truepole_lonr, truepole_latr = rll.get_true_pole_coords_in_rotated_system() rotpole_lon, rotpole_lat = rll.get_north_pole_coords() llcrnrlon, llcrnrlat = rll.toGeographicLonLat(lons_rot[0, 0], lats_rot[0, 0]) urcrnrlon, urcrnrlat = rll.toGeographicLonLat(lons_rot[-1, -1], lats_rot[-1, -1]) b = Basemap(projection="rotpole", lon_0=truepole_lonr - 180, o_lat_p=rotpole_lat, o_lon_p=rotpole_lon, llcrnrlon=llcrnrlon, llcrnrlat=llcrnrlat, urcrnrlon=urcrnrlon, urcrnrlat=urcrnrlat) print(lons_rot[0, 0], lats_rot[0, 0], lons_rot[-1, -1], lats_rot[-1, -1]) b.contourf(lons_rot, lats_rot, lons_rot) b.colorbar() b.drawcoastlines() # b.drawmeridians(np.arange(160, 200, 10)) plt.show()
def plot_only_vegetation_fractions( data_path="/RESCUE/skynet3_rech1/huziy/geof_lake_infl_exp/geophys_Quebec_0.1deg_260x260_with_dd_v6_with_ITFS", canopy_name="VF", label="QC_10km"): r = RPN(data_path) veg_fractions = r.get_2D_field_on_all_levels(name=canopy_name) print(list(veg_fractions.keys())) proj_params = r.get_proj_parameters_for_the_last_read_rec() lons, lats = r.get_longitudes_and_latitudes_for_the_last_read_rec() print(lons.shape) rll = RotatedLatLon(lon1=proj_params["lon1"], lat1=proj_params["lat1"], lon2=proj_params["lon2"], lat2=proj_params["lat2"]) lon0, lat0 = rll.get_true_pole_coords_in_rotated_system() plon, _ = rll.get_north_pole_coords() b = Basemap(projection="rotpole", llcrnrlon=lons[0, 0], llcrnrlat=lats[0, 0], urcrnrlon=lons[-1, -1], urcrnrlat=lats[-1, -1], lon_0=lon0 - 180, o_lon_p=lon0, o_lat_p=lat0) lons[lons > 180] -= 360 for lev in list(veg_fractions.keys()): veg_fractions[lev] = maskoceans(lons, lats, veg_fractions[lev], inlands=False) x, y = b(lons, lats) plot_veg_fractions(x, y, b, veg_fractions, out_image=os.path.join( os.path.dirname(data_path), "veg_fractions_{0}.png".format(label)))
def main(path="/skynet3_rech1/huziy/gemclim_settings.nml"): params = _parse_parameters(path) print(params) ni, nj = 140, 140 # params[Grd_ni_name], params[Grd_nj_name] dx, dy = params[Grd_dx_name], params[Grd_dy_name] iRef, jRef = params[Grd_iref_name] - 1, params[Grd_jref_name] - 1 lonRef, latRef = params[Grd_lonr_name], params[Grd_latr_name] lon1, lat1 = params[Grd_xlon1_name], params[Grd_xlat1_name] lon2, lat2 = params[Grd_xlon2_name], params[Grd_xlat2_name] lons_rot = np.arange(lonRef + (0 - iRef) * dx, lonRef + (ni - iRef) * dx, dx) lats_rot = np.arange(latRef + (0 - jRef) * dy, latRef + (nj - jRef) * dy, dy) lats_rot, lons_rot = np.meshgrid(lats_rot, lons_rot) print(lats_rot.shape) # lons_rot[lons_rot > 180] -= 360 rll = RotatedLatLon(lon1=lon1, lat1=lat1, lon2=lon2, lat2=lat2) truepole_lonr, truepole_latr = rll.get_true_pole_coords_in_rotated_system() rotpole_lon, rotpole_lat = rll.get_north_pole_coords() llcrnrlon, llcrnrlat = rll.toGeographicLonLat(lons_rot[0, 0], lats_rot[0, 0]) urcrnrlon, urcrnrlat = rll.toGeographicLonLat(lons_rot[-1, -1], lats_rot[-1, -1]) b = Basemap( projection="rotpole", lon_0=truepole_lonr - 180, o_lat_p=rotpole_lat, o_lon_p=rotpole_lon, llcrnrlon=llcrnrlon, llcrnrlat=llcrnrlat, urcrnrlon=urcrnrlon, urcrnrlat=urcrnrlat, ) print(lons_rot[0, 0], lats_rot[0, 0], lons_rot[-1, -1], lats_rot[-1, -1]) b.contourf(lons_rot, lats_rot, lons_rot) b.colorbar() b.drawcoastlines() # b.drawmeridians(np.arange(160, 200, 10)) plt.show()
def get_cartopy_proj_and_coords(self): """ :return: lons2d, lats2d, basemap [based on the bathymetry file and gemclim_settings.nml] """ from cartopy import crs # Read longitudes and latitudes and create the basemap only if they are not initialized if self.ccrs is None: with Dataset(os.path.join(self.data_folder, self.bathymetry_file)) as ds: self.lons, self.lats = ds.variables["nav_lon"][:].transpose( ), ds.variables["nav_lat"][:].transpose() import re lon1, lat1 = None, None lon2, lat2 = None, None with open(os.path.join(self.data_folder, self.proj_file)) as f: for line in f: if "Grd_xlat1" in line and "Grd_xlon1" in line: groups = re.findall(r"-?\b\d+.?\d*\b", line) lat1, lon1 = [float(s) for s in groups] if "Grd_xlat2" in line and "Grd_xlon2" in line: groups = re.findall(r"-?\b\d+.?\d*\b", line) lat2, lon2 = [float(s) for s in groups] rll = RotatedLatLon(lon1=lon1, lat1=lat1, lon2=lon2, lat2=lat2) # self.basemap = rll.get_basemap_object_for_lons_lats(lons2d=self.lons, lats2d=self.lats) lon0, _ = rll.get_true_pole_coords_in_rotated_system() o_lon_p, o_lat_p = rll.get_north_pole_coords() print(lon0, o_lat_p) self.ccrs = crs.RotatedPole(pole_longitude=lon0, pole_latitude=o_lat_p) self.lons[self.lons > 180] -= 360 return self.lons, self.lats, self.ccrs
def get_cartopy_proj_and_coords(self): """ :return: lons2d, lats2d, basemap [based on the bathymetry file and gemclim_settings.nml] """ from cartopy import crs # Read longitudes and latitudes and create the basemap only if they are not initialized if self.ccrs is None: with Dataset(os.path.join(self.data_folder, self.bathymetry_file)) as ds: self.lons, self.lats = ds.variables["nav_lon"][:].transpose(), ds.variables["nav_lat"][:].transpose() import re lon1, lat1 = None, None lon2, lat2 = None, None with open(os.path.join(self.data_folder, self.proj_file)) as f: for line in f: if "Grd_xlat1" in line and "Grd_xlon1" in line: groups = re.findall(r"-?\b\d+.?\d*\b", line) lat1, lon1 = [float(s) for s in groups] if "Grd_xlat2" in line and "Grd_xlon2" in line: groups = re.findall(r"-?\b\d+.?\d*\b", line) lat2, lon2 = [float(s) for s in groups] rll = RotatedLatLon(lon1=lon1, lat1=lat1, lon2=lon2, lat2=lat2) # self.basemap = rll.get_basemap_object_for_lons_lats(lons2d=self.lons, lats2d=self.lats) lon0, _ = rll.get_true_pole_coords_in_rotated_system() o_lon_p, o_lat_p = rll.get_north_pole_coords() print(lon0, o_lat_p) self.ccrs = crs.RotatedPole(pole_longitude=lon0, pole_latitude=o_lat_p) self.lons[self.lons > 180] -= 360 return self.lons, self.lats, self.ccrs
def main(base_folder="/skynet3_rech1/huziy/veg_fractions/", fname="pm1983120100_00000000p", canopy_name="Y2C", label="USGS", depth_to_bedrock_name="8L"): data_path = os.path.join(base_folder, fname) r = RPN(data_path) veg_fractions = r.get_2D_field_on_all_levels(name=canopy_name) print(list(veg_fractions.keys())) sand = r.get_first_record_for_name("SAND") clay = r.get_first_record_for_name("CLAY") dpth_to_bedrock = r.get_first_record_for_name(depth_to_bedrock_name) proj_params = r.get_proj_parameters_for_the_last_read_rec() lons, lats = r.get_longitudes_and_latitudes_for_the_last_read_rec() print(lons.shape) rll = RotatedLatLon(lon1=proj_params["lon1"], lat1=proj_params["lat1"], lon2=proj_params["lon2"], lat2=proj_params["lat2"]) lon0, lat0 = rll.get_true_pole_coords_in_rotated_system() plon, _ = rll.get_north_pole_coords() b = Basemap(projection="rotpole", llcrnrlon=lons[0, 0], llcrnrlat=lats[0, 0], urcrnrlon=lons[-1, -1], urcrnrlat=lats[-1, -1], lon_0=lon0 - 180, o_lon_p=lon0, o_lat_p=lat0) lons[lons > 180] -= 360 for lev in list(veg_fractions.keys()): veg_fractions[lev] = maskoceans(lons, lats, veg_fractions[lev], inlands=False) sand = maskoceans(lons, lats, sand) clay = maskoceans(lons, lats, clay) dpth_to_bedrock = maskoceans(lons, lats, dpth_to_bedrock) x, y = b(lons, lats) plot_veg_fractions(x, y, b, veg_fractions, out_image=os.path.join( base_folder, "veg_fractions_{0}.jpeg".format(label))) plot_sand_and_clay(x, y, b, sand, clay, out_image=os.path.join( base_folder, "sand_clay_{0}.jpeg".format(label))) # set relation between vegetation frsction fields and names veg_fract_dict = {} for lev, the_field in veg_fractions.items(): lev = int(lev) if lev not in y2c_level_to_title: continue veg_fract_dict[y2c_level_to_title[lev]] = the_field data = {"SAND": sand, "CLAY": clay, "BDRCK_DEPTH": dpth_to_bedrock} data.update(veg_fract_dict) return b, lons, lats, data, label