def _get_indices(cube, bbox): """ Get the 4 corner indices of a `cube` given a `bbox`. Examples -------- >>> import iris >>> url = ("http://omgsrv1.meas.ncsu.edu:8080/thredds/dodsC/fmrc/sabgom/" ... "SABGOM_Forecast_Model_Run_Collection_best.ncd") >>> cube = iris.load_cube(url, 'sea_water_potential_temperature') >>> bbox = [-87.40, 24.25, -74.70, 36.70] >>> idxs = _get_indices(cube, bbox) >>> [isinstance(idx, np.integer) for idx in idxs] [True, True, True, True] >>> idxs (27, 320, 164, 429) """ from oceans import wrap_lon180 lons = cube.coord('longitude').points lats = cube.coord('latitude').points lons = wrap_lon180(lons) inregion = np.logical_and(np.logical_and(lons > bbox[0], lons < bbox[2]), np.logical_and(lats > bbox[1], lats < bbox[3])) region_inds = np.where(inregion) imin, imax = _minmax(region_inds[0]) jmin, jmax = _minmax(region_inds[1]) return imin, imax + 1, jmin, jmax + 1
def find_bbox(cube, bbox): """ Get the four corner indices of a `cube` given a `bbox`. Examples -------- >>> import iris >>> import numpy as np >>> url = ("http://omgsrv1.meas.ncsu.edu:8080/thredds/dodsC/fmrc/sabgom/" ... "SABGOM_Forecast_Model_Run_Collection_best.ncd") >>> cube = iris.load_cube(url, 'sea_water_potential_temperature') >>> bbox = [-87.40, -74.70, 24.25, 36.70] >>> idxs = find_bbox(cube, bbox) >>> [isinstance(idx, np.integer) for idx in idxs] [True, True, True, True] """ from oceans import wrap_lon180 lons = cube.coords(axis='X')[0].points lats = cube.coords(axis='Y')[0].points lons = wrap_lon180(lons) inregion = np.logical_and(np.logical_and(lons > bbox[0], lons < bbox[1]), np.logical_and(lats > bbox[2], lats < bbox[3])) region_inds = np.where(inregion) imin, imax = _minmax(region_inds[0]) jmin, jmax = _minmax(region_inds[1]) return imin, imax+1, jmin, jmax+1
def make_tree(cube): """Create KDTree.""" lon = cube.coord(axis='X').points lat = cube.coord(axis='Y').points # FIXME: Not sure if it is need when using `iris.intersect()`. lon = wrap_lon180(lon) # Structured models with 1D lon, lat. if (lon.ndim == 1) and (lat.ndim == 1) and (cube.ndim == 3): lon, lat = np.meshgrid(lon, lat) # Unstructure are already paired! tree = KDTree(zip(lon.ravel(), lat.ravel())) return tree, lon, lat
def bbox_extract_2Dcoords(cube, bbox): """Extract a sub-set of a cube inside a lon, lat bounding box bbox=[lon_min lon_max lat_min lat_max]. NOTE: This is a work around too subset an iris cube that has 2D lon, lat coords.""" lons = cube.coord('longitude').points lats = cube.coord('latitude').points lons = wrap_lon180(lons) inregion = np.logical_and(np.logical_and(lons > bbox[0], lons < bbox[2]), np.logical_and(lats > bbox[1], lats < bbox[3])) region_inds = np.where(inregion) imin, imax = minmax(region_inds[0]) jmin, jmax = minmax(region_inds[1]) return cube[..., imin:imax + 1, jmin:jmax + 1]
def bbox_extract_2Dcoords(cube, bbox): """Extract a sub-set of a cube inside a lon, lat bounding box bbox=[lon_min lon_max lat_min lat_max]. NOTE: This is a work around too subset an iris cube that has 2D lon, lat coords.""" lons = cube.coord('longitude').points lats = cube.coord('latitude').points lons = wrap_lon180(lons) inregion = np.logical_and(np.logical_and(lons > bbox[0], lons < bbox[2]), np.logical_and(lats > bbox[1], lats < bbox[3])) region_inds = np.where(inregion) imin, imax = minmax(region_inds[0]) jmin, jmax = minmax(region_inds[1]) return cube[..., imin:imax+1, jmin:jmax+1]
1.25, 1.50, 1.75, 2.00, 2.50]) # Colors for Vorticity. colorsavor500 = ('#660066', '#660099', '#6600CC', '#6600FF', 'w', '#ffE800', '#ffD800', '#ffC800', '#ffB800', '#ffA800', '#ff9800', '#ff8800', '#ff7800', '#ff6800', '#ff5800', '#ff5000', '#ff4000', '#ff3000') # <codecell> from oceans import wrap_lon180 # Subset the lats and lons from the model according to view desired. clats1 = hght300.coord(axis='Y').points clons1 = wrap_lon180(hght300.coord(axis='X').points) # Make a grid of lat/lon values to use for plotting with Basemap. clats, clons = np.meshgrid(clons1, clats1) # <codecell> %matplotlib inline import matplotlib.pyplot as plt import cartopy.crs as ccrs from cartopy.mpl import geoaxes import cartopy.feature as cfeature from mpl_toolkits.basemap import cm
with warnings.catch_warnings(): warnings.simplefilter("ignore") # Suppress iris warnings. cube = quick_load_cubes(url, name_list, callback=None, strict=True) # <codecell> cube # <codecell> cube.coord(axis='X').points[:20] # <codecell> # Just found a bug in proc_cube(). Meanwhile lets skip the constraint step. cube.coord(axis='X').points = wrap_lon180(cube.coord(axis='X').points) # <codecell> cube.coord(axis='X').points[:20] # <codecell> # cube = proc_cube(cube, bbox=bbox, time=(start, stop), units=units) cube = get_surface(cube) # Get a 2D surface cube. I am working on 3D... cube # <codecell> from utilities import get_nearest_water, make_tree