Calculate the terrain correction#

Tip

Example script to calculate the terrain correction using the terrain_correction_example script in the examples\scripts folder.

Import some modules

import os
import pathlib

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

from gsolve import (
    GravitySites,
    TerrainCorrectionParameters,
    TerrainCorrector,
)

Setup paths to directories and files.

data_path = pathlib.Path(__file__).parent.parent

grid_dir = data_path / "surveys" / "terrain_corrections"

data_file = "RIG_Terrain160_2610.xlsx"
dem_file1 = grid_dir / "Wellington8m_Land.tif"
dem_file2 = grid_dir / "wellington200m_Land.tif"

load file with station locations and elevations#

This can be done using the GravitySites.from_excel() method

sites = GravitySites.from_excel(
    grid_dir / data_file,
    sheet_name="Locations",
)

Setup the terrain correction zones#

For each distance zone, usually associated with different DEM resolutions, set up the zone parameters. Note only clamp_elevation for the inner most zone, or zone with the most detailed DEM.

inner_zone_params = TerrainCorrectionParameters(
    min_dist=160.0,  # in meters
    max_dist=2160.0,  # in meters
    terrain_density=2670.0,  # in kg/m3
    water_density=1030.0,  # in kg/m3
    distance_mask_type="radial",
    dem_source=grid_dir / dem_file1,
    clamp_elevation=True,
    name="8m_dem",
)

outer_zone_params = TerrainCorrectionParameters(
    min_dist=2160.0,  # in meters
    max_dist=21900.0,  # in meters
    dem_source=grid_dir / dem_file2,
    name="200m_dem",
    clamp_elevation=False,
)

Create a terrain corrector object#

corrector = TerrainCorrector(params=[inner_zone_params, outer_zone_params])

Compute the terrain correction#

results = corrector.compute(
    points=sites,
    show_progress=True,
)

If you have tqdm installed a progress bar will show show_progress=True

Save the results#

results.to_excel(
    grid_dir / "terrain_correction_results.xlsx",
    sheet_name="Terrain_Correction",
    if_workbook_exists="replace",
)

Once terrain corrections have been calculated the results can be read back in during a standard work flow.

from gsolve.reductions.terrain_corrections import TerrainCorrectionOutput

results_reread_from_disk = TerrainCorrectionData.from_excel(
  grid_dir / "terrain_correction_results.xlsx"
)

This will make it available for inclusion in complete Bouguer anomaly calculations.