示例#1
0
def load_mask_modis(catchment, mask_folder, modis_dem):
    '''
    load mask and trimmed mask of catchment for modis clutha domain
    '''

    if modis_dem == 'clutha_dem_250m':
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.2e6,
            extent_e=1.4e6,
            extent_n=5.13e6,
            extent_s=4.82e6,
            resolution=250,
            origin='bottomleft')

    if modis_dem == 'si_dem_250m':
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.08e6,
            extent_e=1.72e6,
            extent_n=5.52e6,
            extent_s=4.82e6,
            resolution=250,
            origin='bottomleft')

    if modis_dem == 'modis_si_dem_250m':
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.085e6,
            extent_e=1.72e6,
            extent_n=5.52e6,
            extent_s=4.82e6,
            resolution=250,
            origin='bottomleft')
    if modis_dem == 'modis_nz_dem_250m':
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.085e6,
            extent_e=2.10e6,
            extent_n=6.20e6,
            extent_s=4.70e6,
            resolution=250,
            origin='bottomleft')

    # # Get the masks for the individual regions of interest
    mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, modis_dem))

    _, _, trimmed_mask, _, _ = trim_lat_lon_bounds(mask, lat_array, lon_array,
                                                   mask.copy(), y_centres,
                                                   x_centres)

    return mask, trimmed_mask
def load_mask_modis(catchment, output_dem, mask_folder, dem_folder, modis_dem):
    '''
    load mask and trimmed mask of catchment for modis clutha domain
    '''

    if modis_dem == 'clutha_dem_250m':
        # dem_file = dem_folder + modis_dem + '.tif'
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(None)

    if modis_dem == 'si_dem_250m':
        # dem_file = dem_folder + modis_dem + '.tif'
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.08e6,
            extent_e=1.72e6,
            extent_n=5.52e6,
            extent_s=4.82e6,
            resolution=250)

    if modis_dem == 'modis_si_dem_250m':
        # dem_file = dem_folder + modis_dem + '.tif'
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.085e6,
            extent_e=1.72e6,
            extent_n=5.52e6,
            extent_s=4.82e6,
            resolution=250)

    # # Get the masks for the individual regions of interest
    mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, modis_dem))

    _, _, trimmed_mask, _, _ = trim_lat_lon_bounds(mask, lat_array, lon_array,
                                                   mask.copy(), y_centres,
                                                   x_centres)

    return mask, trimmed_mask
示例#3
0
    years_to_take = range(2000, 2016 + 1)  # range(2001, 2013 + 1)
    ta_version = 'jobst_ucc'
    # input met data
    nc_file_rain = 'Z:/JOBST_met_data/PRECIP_WITH_UCC/CLUTHA_PRECIP_250m_'  # provide only partial filename up to 01-Jan-2000to31-dec-2000
    nc_file_tmax = 'Z:/JOBST_met_data/Tmax/CLUTHA_Tmax_250m_'
    nc_file_tmin = 'Z:/JOBST_met_data/Tmin/CLUTHA_Tmin_250m_'
    nc_file_srad = 'Z:/newVCSN/srad_vclim_clidb_1972010100_2017102000_south-island_p05_daily.nc'

    # output met data
    met_out_folder = 'T:/DSC-Snow/input_data_hourly'

    ####

    # set up input and output DEM for processing
    # output DEM
    nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
        dem_file, origin=origin)
    data_id = '{}_{}'.format(catchment,
                             output_dem)  # name to identify the output data
    if mask_dem == True:
        # Get the masks for the individual regions of interest
        if mask_created == True:  # load precalculated mask
            mask = np.load(mask_folder +
                           '/{}_{}.npy'.format(catchment, output_dem))
            if origin == 'topleft':
                mask = np.flipud(mask)
        else:  # create mask and save to npy file
            # masks = get_masks() #TODO set up for multiple masks
            mask = create_mask_from_shpfile(lat_array, lon_array, mask_shpfile)
            if origin == 'topleft':  # flip to save as bottom left
                mask = np.flipud(mask)
            np.save(mask_folder + '/{}_{}.npy'.format(catchment, output_dem),
catchment = 'SI'
output_dem = 'si_dem_250m'  # identifier for output dem
years_to_take = np.arange(2001,
                          2020 + 1)  # [2013 + 1]  # range(2001, 2013 + 1)
model_swe_sc_threshold = 20  # threshold for treating a grid cell as snow covered (mm w.e)
model_output_folder = '/nesi/nobackup/niwa00004/jonoconway/snow_sims_nz/vcsn'
plot_folder = '/nesi/nobackup/niwa00004/jonoconway/snow_sims_nz'
dem_folder = '/nesi/project/niwa00004/jonoconway'  # dem used for output #'C:/Users/conwayjp/OneDrive - NIWA/Data/GIS_DATA/Topography/DEM_NZSOS'#

print('loading dem')
# load si dem and trim to size. (modis has smaller extent to west (1.085e6)
si_dem_file = dem_folder + '/si_dem_250m' + '.tif'
nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
    si_dem_file,
    extent_w=1.08e6,
    extent_e=1.72e6,
    extent_n=5.52e6,
    extent_s=4.82e6,
    resolution=250)
nztm_dem = nztm_dem[:, 20:]
x_centres = x_centres[20:]
lat_array = lat_array[:, 20:]
lon_array = lon_array[:, 20:]

plt.rcParams.update({'font.size': 6})
plt.rcParams.update({'axes.titlesize': 6})

bin_edges = [-0.001, 30, 60, 90, 120, 180, 270, 360
             ]  # use small negative number to include 0 in the interpolation

for i, year_to_take in enumerate(years_to_take):
                                1)  # [2013 + 1]  # range(2001, 2013 + 1)
plot_folder = 'C:/Users/conwayjp/OneDrive - NIWA/projects/CARH2101/snow reanalysis/NZ/august2021'  #TODO
# plot_folder = '/nesi/nobackup/niwa00004/jonoconway/snow_sims_nz'
# model_analysis_area = 145378  # sq km.
catchment = 'NZ'  # string identifying catchment modelled #TODO
mask_folder = 'C:/Users/conwayjp/OneDrive - NIWA/projects/CARH2101/snow reanalysis'
dem_folder = 'C:/Users/conwayjp/OneDrive - NIWA/Data/GIS_DATA/Topography/DEM_NZSOS'
modis_dem = 'modis_nz_dem_250m'  #TODO

if modis_dem == 'modis_si_dem_250m':

    si_dem_file = dem_folder + '/si_dem_250m' + '.tif'
    nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
        si_dem_file,
        extent_w=1.08e6,
        extent_e=1.72e6,
        extent_n=5.52e6,
        extent_s=4.82e6,
        resolution=250)
    nztm_dem = nztm_dem[:, 20:]
    x_centres = x_centres[20:]
    lat_array = lat_array[:, 20:]
    lon_array = lon_array[:, 20:]
    modis_output_dem = 'si_dem_250m'
    mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, modis_dem))

elif modis_dem == 'modis_nz_dem_250m':
    si_dem_file = dem_folder + '/nz_dem_250m' + '.tif'
    _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
        None,
        extent_w=1.085e6,
    in_elev = np.ones((260, 243))

    # code to get output lat/lons
    # dem_folder = '/mnt/data/GIS_DATA/Topography/DEM_NZSOS/'
    #catchment = 'Clutha'
    dem = 'clutha_dem_250m'
    #subcatchment = 'qldc_ta_area'
    catchment = 'Clutha'

    mask_folder = r'C:\Users\conwayjp\OneDrive - NIWA\Temp\Masks'

    # dem_file = dem_folder + dem + '.tif'
    # elev, easting, northing, lat_array, lon_array = setup_nztm_dem(dem_file)

    # create new outlons and out_lats using trim for the qldc mask here
    nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
        dem_file=None)
    mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, dem))

    # qldc_mask = np.load(mask_folder + '/{}_{}.npy'.format(subcatchment, dem))

    out_lats, out_lons, trimmed_mask, _, _ = trim_lat_lon_bounds(
        mask, lat_array, lon_array, mask.copy(), y_centres, x_centres)
    # returns: lats, lons, elev, northings, eastings
    mask = trimmed_mask

    #out_lons = lon_array
    out_lats = np.flipud(out_lats)  #(lat_array)
    # northing = np.flipud(northing)
    # out_elev = elev
    out_elev = trimmed_mask * 0.0
"""

create masks for NZ and SI wide domains for simulations

Jono Conway
"""

import matplotlib.pylab as plt
import numpy as np
from nz_snow_tools.util.utils import setup_nztm_dem

# # set up modis 250m nz grid
nztm_dem2, x_centres2, y_centres2, lat_array2, lon_array2 = setup_nztm_dem(
    None,
    extent_w=1.085e6,
    extent_e=2.10e6,
    extent_n=6.20e6,
    extent_s=4.70e6,
    resolution=250,
    origin='bottomleft')
# read in 250m grid topography from
nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
    r"C:\Users\conwayjp\OneDrive - NIWA\Data\GIS_DATA\Topography\DEM_NZSOS\nz_dem_250m.tif",
    extent_w=1.05e6,
    extent_e=2.10e6,
    extent_n=6.275e6,
    extent_s=4.70e6,
    resolution=250,
    origin='bottomleft')

# mask for nz modis domain on nz 250m dem domain
modis_nz_ew_extent = np.logical_and(x_centres > 1.085e6, x_centres < 2.10e6)
示例#8
0
import netCDF4 as nc
import numpy as np
import matplotlib.pylab as plt
from nz_snow_tools.util.utils import setup_nztm_dem


origin = 'topleft'  # origin of new DEM surface
out_file = 'C:/Users/conwayjp/OneDrive - NIWA/projects/DSC Snow/Projects-DSC-Snow/runs/idealised/met_off_origin{}.nc'.format(origin)


inp_t = -2.0
inp_p = 20.0

# create new dem surface
_, eastings, northings, lats, lons = setup_nztm_dem(dem_file=None, extent_w=1.235e6, extent_e=1.26e6, extent_n=5.05e6, extent_s=5.025e6, resolution=250,
                                                    origin=origin)

elev = np.zeros((100, 100))  # set up dummy elevation at 0

# put onto new grid
t_grid = inp_t * np.ones((100, 100))
p_grid = inp_p * np.ones((100, 100))

file_out = nc.Dataset(out_file, 'w')

# start with georeferencing
file_out.createDimension('rows', len(northings))
file_out.createDimension('columns', len(eastings))

file_out.createDimension('latitude', len(northings))
file_out.createDimension('longitude', len(eastings))
# import argparse

import netCDF4 as nc
import numpy as np
import matplotlib.pylab as plt
from nz_snow_tools.util.utils import setup_nztm_dem
from nz_snow_tools.util.write_fsca_to_netcdf import setup_nztm_grid_netcdf

lapse = -0.005
climate_file = nc.Dataset(
    r"T:\DSC-Snow\input_data_hourly\met_inp_Clutha_nztm250m_2016_norton_topleft.nc"
)
origin = 'topleft'  # origin of new DEM surface

# create dem surface
clutha_dem, inp_eastings, inp_northings, _, _ = setup_nztm_dem(
    'Z:/GIS_DATA/Topography/DEM_NZSOS/clutha_dem_250m.tif')

y_point = np.where(
    climate_file.variables['northing'][:] == inp_northings[703])[0][0]
x_point = np.where(
    climate_file.variables['easting'][:] == inp_eastings[133])[0][0]
inp_t = climate_file.variables['air_temperature'][:, y_point, x_point]
inp_p = climate_file.variables['precipitation_amount'][:, y_point, x_point]
inp_sw = climate_file.variables['surface_downwelling_shortwave_flux'][:,
                                                                      y_point,
                                                                      x_point]
inp_elev = climate_file.variables['elevation'][y_point, x_point]
hourly_dt = nc.num2date(climate_file.variables['time'][:],
                        climate_file.variables['time'].units)

# create new dem surface
示例#10
0
import pickle
import netCDF4 as nc
import numpy as np
import matplotlib.pylab as plt
from nz_snow_tools.util.utils import setup_nztm_dem

origin = 'topleft'  # origin of new DEM surface
out_file = '/met_offset_origin{}_trimmed2_withnan.nc'.format(origin)
working_folder = 'C:/Users/conwayjp/OneDrive - NIWA/projects/DSC Snow/for_Christian_June2021'

# load dem surface
dem_file = 'C:/Users/conwayjp/OneDrive - NIWA/Data/GIS_DATA/Topography/DEM_NZSOS/si_dem_250m.tif'
elev, eastings, northings, lats, lons = setup_nztm_dem(dem_file,
                                                       extent_w=1.08e6,
                                                       extent_e=1.72e6,
                                                       extent_n=5.52e6,
                                                       extent_s=4.82e6,
                                                       resolution=250)

# load t offset file - Trimmed2 has areas wiht poor model performance removed.
t_grid = pickle.load(open(
    working_folder +
    '/t_bias_optim_t_NS_SouthIsland_swe20_norton_5_t-2_p0_topleft_rs4_smooth10_trimmed2_fullres_withnan.pkl',
    'rb'),
                     encoding='latin1')
# set precip offset to 0
# p_grid = np.zeros(t_grid.shape)

file_out = nc.Dataset(working_folder + out_file, 'w')

# start with georeferencing
                                     skip_header=1,
                                     usecols=2)
hs_sites['elevation'] = np.genfromtxt(store_folder +
                                      '/SIN snow depth sites.csv',
                                      delimiter=',',
                                      skip_header=1,
                                      usecols=3)

dem_folder = 'C:/Users/conwayjp/OneDrive - NIWA/Data/GIS_DATA/Topography/DEM_NZSOS/'
dem = 'nz_dem_500m'
dem_file = dem_folder + dem + '.tif'

nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
    dem_file,
    extent_w=1.05e6,
    extent_e=2.10e6,
    extent_n=6.275e6,
    extent_s=4.70e6,
    resolution=500)

# point = wgs84_to_nztm(-45,176)

map_crs = ccrs.TransverseMercator(central_longitude=173.0,
                                  central_latitude=0.0,
                                  false_easting=1600000,
                                  false_northing=10000000,
                                  scale_factor=0.9996,
                                  globe=ccrs.Globe(ellipse='GRS80'))
data_crs = ccrs.PlateCarree()  # data is in lat/lon coordinates

plt.figure(figsize=(4.5, 5))
示例#12
0
catchment = 'SI'  # identifier for catchment mask and output netcdf
mask_dem = False  # boolean to set whether or not to mask the output dem
output_dem = 'nztm250m'  # identifier for output dem
out_file = 'C:/Users/conwayjp/OneDrive - NIWA/projects/DSC Snow/Projects-DSC-Snow/runs/input_DEM/{}_{}_topo_no_ice_origin{}.nc'.format(
    catchment, output_dem, origin)
sky_view_file = 'C:/Users/conwayjp/OneDrive - NIWA/Data/GIS_DATA/Topography/DEM_NZSOS/nzdem_SI_125v1_Vsky_DS.tif'

# parameters needed only for mask
mask_shpfile = (
    'Z:/GIS_DATA/Hydrology/Catchments/{} full WGS84.shp'.format(catchment))
mask_created = True  # boolean to set whether or not the mask has already been created
#input_dem = 'clutha_dem_250m'
input_dem = dem_file.split('/')[-1].split('.')[0]

if input_dem == 'clutha_dem_250m':
    nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
        dem_file=dem_file, origin=origin)

elif input_dem == 'si_dem_250m':
    nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
        dem_file=dem_file,
        origin=origin,
        extent_w=1.08e6,
        extent_e=1.72e6,
        extent_n=5.52e6,
        extent_s=4.82e6,
        resolution=250)
else:
    print('cannot interpret dem file specified')

if sky_view_file is not None:
    nztm_skyview, _, _, _, _ = setup_nztm_dem(dem_file=sky_view_file,