Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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)))
Ejemplo n.º 3
0
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
    )
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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()
Ejemplo n.º 7
0
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)))
Ejemplo n.º 8
0
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()
Ejemplo n.º 9
0
    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
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
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
Ejemplo n.º 12
0
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