imod.select.cross_section_linestring#

imod.select.cross_section_linestring(data, linestring)[source]#

Obtain an interpolated cross-sectional slice through gridded data. Utilizing the interpolation functionality in xarray, this function takes a vertical cross-sectional slice along a linestring through the given data on a regular grid, which is given as an xarray.DataArray so that we can utilize its coordinate data.

Adapted from Metpy: https://github.com/Unidata/MetPy/blob/master/metpy/interpolate/slices.py

Parameters:
  • data (xarray.DataArray or xarray.Dataset) –

    Three- (or higher) dimensional field(s) to interpolate. The DataArray (or each DataArray in the Dataset) must have been parsed by MetPy and include both an x and y coordinate dimension and the added crs

    coordinate.

  • linestring (shapely.geometry.LineString) –

    Shapely geometry designating the linestring along which to sample the cross section.

    Note that a LineString can easily be taken from a geopandas.GeoDataFrame using the .geometry attribute. Please refer to the examples.

Returns:

The interpolated cross section, with new index dimension along the cross-section.

Return type:

xarray.DataArray or xarray.Dataset

Examples

Load a shapefile (that you might have drawn before using a GIS program), take a linestring from it, and use it to extract the data for a cross section.

>>> geodataframe = gpd.read_file("cross_section.shp")
>>> linestring = geodataframe.geometry[0]
>>> section = cross_section_linestring(data, linestring)

Or, construct the linestring directly in Python:

>>> import shapely.geometry as sg
>>> linestring = sg.LineString([(0.0, 1.0), (5.0, 5.0), (7.5, 5.0)])
>>> section = cross_section_linestring(data, linestring)

If you have drawn multiple cross sections within a shapefile, simply loop over the linestrings:

>>> sections = [cross_section_linestring(data, ls) for ls in geodataframe.geometry]