_images/wavespectra_logo.png

Selecting#

Wavespectra complements xarray’s selecting and interpolating functionality with functions to select and interpolate from site (1D) coordinates. The functions are defined in wavespectra.core.select module and can be accessed via the sel method from the SpecArray and SpecDataset accessors.

Note

The select methods in wavespectra are designed to work with 1D spatial coordinates only which is typically the case for spectral data. For 2D, gridded coordinates, use xarray’s native indexing and interpolation methods.

Nearest neighbour#

Select from nearest sites.

In [1]: from wavespectra import read_ww3

In [2]: dset = read_ww3("_static/ww3file.nc")

In [3]: ds = dset.spec.sel(
   ...:     lons=[92.01, 92.05, 92.09],
   ...:     lats=[19.812, 19.875, 19.935],
   ...:     method="nearest"
   ...: )
   ...: 

In [4]: ds
Out[4]: 
<xarray.Dataset> Size: 65kB
Dimensions:  (time: 9, site: 3, freq: 25, dir: 24)
Coordinates:
  * freq     (freq) float32 100B 0.04118 0.0453 0.04983 ... 0.3352 0.3687 0.4056
  * time     (time) datetime64[ns] 72B 2014-12-01 ... 2014-12-05
  * dir      (dir) float32 96B 270.0 255.0 240.0 225.0 ... 315.0 300.0 285.0
  * site     (site) int64 24B 0 1 2
Data variables:
    dpt      (time, site) float32 108B dask.array<chunksize=(9, 3), meta=np.ndarray>
    efth     (time, site, freq, dir) float32 65kB dask.array<chunksize=(9, 3, 25, 24), meta=np.ndarray>
    lat      (site) float32 12B dask.array<chunksize=(3,), meta=np.ndarray>
    lon      (site) float32 12B dask.array<chunksize=(3,), meta=np.ndarray>
    wspd     (time, site) float32 108B dask.array<chunksize=(9, 3), meta=np.ndarray>
    wdir     (time, site) float32 108B dask.array<chunksize=(9, 3), meta=np.ndarray>

Inverse distance weighting#

Interpolate at exact locations via inverse distance weighting algorithm.

In [5]: ds = dset.spec.sel(
   ...:     lons=[92.01, 92.05, 92.09],
   ...:     lats=[19.812, 19.875, 19.935],
   ...:     method="idw"
   ...: )
   ...: 

In [6]: ds
Out[6]: 
<xarray.Dataset> Size: 65kB
Dimensions:  (time: 9, site: 3, freq: 25, dir: 24)
Coordinates:
  * freq     (freq) float32 100B 0.04118 0.0453 0.04983 ... 0.3352 0.3687 0.4056
  * time     (time) datetime64[ns] 72B 2014-12-01 ... 2014-12-05
  * dir      (dir) float32 96B 270.0 255.0 240.0 225.0 ... 315.0 300.0 285.0
  * site     (site) int64 24B 0 1 2
Data variables:
    dpt      (time, site) float32 108B dask.array<chunksize=(9, 1), meta=np.ndarray>
    efth     (time, site, freq, dir) float32 65kB dask.array<chunksize=(9, 1, 25, 24), meta=np.ndarray>
    lat      (site) float64 24B 19.81 19.88 19.93
    lon      (site) float64 24B 92.01 92.05 92.09
    wspd     (time, site) float32 108B dask.array<chunksize=(9, 1), meta=np.ndarray>
    wdir     (time, site) float32 108B dask.array<chunksize=(9, 1), meta=np.ndarray>

Bounding box#

Select all sites withing bounding box.

In [7]: ds = dset.spec.sel(
   ...:     lons=[91, 93],
   ...:     lats=[19, 20],
   ...:     method="bbox"
   ...: )
   ...: 

In [8]: ds
Out[8]: 
<xarray.Dataset> Size: 44kB
Dimensions:  (time: 9, site: 2, freq: 25, dir: 24)
Coordinates:
  * freq     (freq) float32 100B 0.04118 0.0453 0.04983 ... 0.3352 0.3687 0.4056
  * time     (time) datetime64[ns] 72B 2014-12-01 ... 2014-12-05
  * dir      (dir) float32 96B 270.0 255.0 240.0 225.0 ... 315.0 300.0 285.0
  * site     (site) int64 16B 0 1
Data variables:
    dpt      (time, site) float32 72B dask.array<chunksize=(9, 2), meta=np.ndarray>
    efth     (time, site, freq, dir) float32 43kB dask.array<chunksize=(9, 2, 25, 24), meta=np.ndarray>
    lat      (site) float32 8B dask.array<chunksize=(2,), meta=np.ndarray>
    lon      (site) float32 8B dask.array<chunksize=(2,), meta=np.ndarray>
    wspd     (time, site) float32 72B dask.array<chunksize=(9, 2), meta=np.ndarray>
    wdir     (time, site) float32 72B dask.array<chunksize=(9, 2), meta=np.ndarray>