Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.


Author:

Randall Bonnell

This notebook is designed to obtain snow depth, density, and SWE from ground-penetrating radar data. We will use GPR data gathered during the SnowEx Alaska campaigns, with validation from the airborne lidar obtained during the same campaign.

The text and code in this notebook is adapted from Randall Bonnell’s tutorial on lidar and GPR during the 2024 SnowEx Hackweek, found here: https://snowex-2024.hackweek.io/tutorials/gpr_lidar/GPR_Lidar_HackweekTutorial.html

Title Card

1. GPR Methods for the Retrieval of Snow Depth and SWE

What is GPR?

  • GPR transmits a radar signal into the snowpack, which then reflects off objects/interfaces with contrasting dielectric permittivity. The GPR records the amplitude and two-way travel time (twt) of the reflections.

  • Dielectric permittivity refers to the dielectric properties of the snowpack that define how EM energy trasmits through the medium.

  • Usually, we are interested in the snow-ground interface, and we measure the snowpack thickness (depth) in two-way travel time (in nanoseconds).

  • Most analysis-ready GPR products have twt, snow depth, and SWE variables. Some have also been updated to include derived snow density

For this notebook, we will start from the two-way travel time data to derive our snow properties of interest, and compare it to airborne lidar data. The snowexsql package will be needed.

Note that the results derived here are for the user’s reference - most of the GPR products posted on NSIDC already have snow depth and SWE available as variables.

2. SnowEx23 GPR/Lidar Derived Permittivities/Densities in the Boreal Forest, Alaska

Deriving Snow Density at Farmer’s Loop/Creamer’s Field

For this first step, we will use:

  1. Airborne lidar data collected on 11 March, 2023.

  2. GPR data collected on 7, 11, 13, and 16 March, 2023.

🔍 Testing Lambda connection...
✅ Connected: True
📊 Database: PostgreSQL 16.10 on x86_64-conda-linux-gnu, compiled by x86_64-conda-linux-gnu-cc (conda-forge gcc 14.3.0-4) 14.3.0, 64-bit

Part 1: Load the GPR data from the SnowEx data base

<Figure size 640x480 with 1 Axes>
<Figure size 640x480 with 1 Axes>

Load Lidar-Derived Canopy Height and Snow Depth

To compare against the GPR data, we will load airborne lidar data products, specifically canopy height and snow depths. To facilitate our analysis, we will create a bounding box for the lidar results using our GPR data.

We will load the lidar data directly from an S3 bucket hosted on AWS:

Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.hdr: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.HDR: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.IMD: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.imd: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.RPB: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.rpb: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.PVL: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.pvl: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0_rpc.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0_RPC.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0_metadata.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0_METADATA.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0_MTL.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0_MTL.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/METADATA.DIM: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/metadata.dim: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0_metadata.xml: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0_METADATA.XML: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.RPC: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.rpc: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/summary.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SUMMARY.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/HDR_Lidar_FLCF_CH_0.5M_20221024_V01.0.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/HDR_Lidar_FLCF_CH_0.5M_20221024_V01.0.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/HDRX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/HDRX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/RPC_Lidar_FLCF_CH_0.5M_20221024_V01.0.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/RPC_Lidar_FLCF_CH_0.5M_20221024_V01.0.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/RPCX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/RPCX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.tif.msk: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_CH_0.5M_20221024_V01.0.tif.MSK: 403
<Figure size 1000x800 with 2 Axes>
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.hdr: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.HDR: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.IMD: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.imd: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.RPB: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.rpb: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.PVL: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.pvl: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0_rpc.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0_RPC.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0_metadata.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0_METADATA.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0_MTL.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0_MTL.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0_metadata.xml: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0_METADATA.XML: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.RPC: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.rpc: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/HDR_Lidar_FLCF_SD_0.5M_20230311_V01.0.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/HDR_Lidar_FLCF_SD_0.5M_20230311_V01.0.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/HDRX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/HDRX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/RPC_Lidar_FLCF_SD_0.5M_20230311_V01.0.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/RPC_Lidar_FLCF_SD_0.5M_20230311_V01.0.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/RPCX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.txt: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/RPCX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.TXT: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.tif.msk: 403
Warning 1: HTTP response code on https://snowex-tutorials.s3.us-west-2.amazonaws.com/lidar/SNEX23_Lidar_FLCF_SD_0.5M_20230311_V01.0.tif.MSK: 403
<Figure size 1000x800 with 2 Axes>

Match GPR data with lidar data

To match the GPR and lidar data, we can either rasterize the GPR data or vectorize the lidar data. For simplicity, we will vectorize the lidar data and perform a nearest neighbor search.

The GPR data is ~0.1 m resolution, whereas the lidar data is ~0.5 m resolution. So, we can expect ~5 GPR data points per lidar pixel.

The x resolution of the snow depth raster is: 0.5
The y resolution of the snow depth raster is: 0.5
Number of lidar points: 487925
Number of GPR points: 20213

For the nearest-neighbor approach, we will be using a K-D tree to efficiently find adjacent points.

Median twt array size: (487925,)
Number of non-nan values: 3788

The GPR data is not as spatially continuous as the lidar data, so twt_median has a lot of NaN values. To reduce memory usage, let’s remove those.

(3788,)

Now that the data is matched, and we have removed NaN values, we can now calculate relative permittivity and snow density.

Examine the derived densities

Now that we’ve gone through all of this trouble, let’s take a look at the derived snow densities.

<Figure size 640x480 with 2 Axes>

We can also check the histogram distribution of snow density.

<Figure size 640x480 with 1 Axes>

There’s some pretty unrealistic values in the data, so let’s zoom in to more realistic densities.

<Figure size 640x480 with 1 Axes>

Even at this range, there is a fair amount of random error. This may be caused by the measurement accuracy of the lidar or the GPR, the depth of the snow, and/or geolocation uncertainty.

A user could further improve these densities by upsampling the lidar to match the GPR’s geolocation uncertainty (3 m in this case), remove erroneous values in the snow depth or permittivity data, or run a spatial averaging filter.

References by topic

Lidar Datasets

Relevant GPR LWC Studies

Relevant GPR Density Studies

References
  1. Larsen, C. (2024). SnowEx23 Airborne Lidar-Derived 0.25M Snow Depth and Canopy Height, Version 1. NASA National Snow. 10.5067/BV4D8RRU1H7U
  2. Webb, R. W., Jennings, K. S., Fend, M., & Molotch, N. P. (2018). Combining Ground‐Penetrating Radar With Terrestrial LiDAR Scanning to Estimate the Spatial Distribution of Liquid Water Content in Seasonal Snowpacks. Water Resources Research, 54(12). 10.1029/2018wr022680
  3. Webb, R. W., Wigmore, O., Jennings, K., Fend, M., & Molotch, N. P. (2020). Hydrologic connectivity at the hillslope scale through intra‐snowpack flow paths during snowmelt. Hydrological Processes, 34(7), 1616–1629. 10.1002/hyp.13686
  4. Bonnell, R., McGrath, D., Williams, K., Webb, R., Fassnacht, S. R., & Marshall, H.-P. (2021). Spatiotemporal Variations in Liquid Water Content in a Seasonal Snowpack: Implications for Radar Remote Sensing. Remote Sensing, 13(21), 4223. 10.3390/rs13214223
  5. Webb, R. W., Musselman, K. N., Ciafone, S., Hale, K. E., & Molotch, N. P. (2022). Extending the vadose zone: Characterizing the role of snow for liquid water storage and transmission in streamflow generation. Hydrological Processes, 36(3). 10.1002/hyp.14541
  6. Yildiz, S., Akyurek, Z., & Binley, A. (2021). Quantifying snow water equivalent using terrestrial ground penetrating radar and unmanned aerial vehicle photogrammetry. Hydrological Processes, 35(5). 10.1002/hyp.14190
  7. McGrath, D., Bonnell, R., Zeller, L., Olsen-Mikitowicz, A., Bump, E., Webb, R., & Marshall, H.-P. (2022). A Time Series of Snow Density and Snow Water Equivalent Observations Derived From the Integration of GPR and UAV SfM Observations. Frontiers in Remote Sensing, 3. 10.3389/frsen.2022.886747
  8. Bonnell, R., McGrath, D., Hedrick, A. R., Trujillo, E., Meehan, T. G., Williams, K., Marshall, H., Sexstone, G., Fulton, J., Ronayne, M. J., Fassnacht, S. R., Webb, R. W., & Hale, K. E. (2023). Snowpack relative permittivity and density derived from near‐coincident lidar and ground‐penetrating radar. Hydrological Processes, 37(10). 10.1002/hyp.14996