A standalone utility for vertical elevation datum transformations.
Project description
Transformez
Global vertical datum transformations, simplified.
Transformez is a standalone Python engine for converting geospatial data between vertical datums (e.g., MLLW ↔ NAVD88 ↔ Ellipsoid).
(Above: A generated vertical shift grid transforming MLLW to NAVD88)
transformez run -R loc:"new orleans" -E 3s -I mllw -O 5703
Installation
Prerequisites: HTDP
Transformez relies on the NGS Horizontal Time-Dependent Positioning (HTDP) software to perform highly accurate plate tectonic and frame transformations. You must install this separately.
For Windows:
- Download the pre-compiled executable (
htdp.exe) directly from the NOAA HTDP page. - Place
htdp.exein a directory that is in your system'sPATH(e.g.,C:\Windows\System32or a custom scripts folder).
For Linux / macOS:
You will need a Fortran compiler (like gfortran) to compile the source code.
# 1. Download the Fortran source code
wget https://geodesy.noaa.gov/TOOLS/Htdp/HTDP-download.zip
unzip HTDP-download.zip
# 2. Compile it
gfortran -o htdp htdp.f
# 3. Move it to your PATH
sudo mv htdp /usr/local/bin/
Install Transformez
Once HTDP is accessible in your terminal, install the python package:
pip install transformez
Usage
Generate a vertical shift grid for anywhere on Earth.
# Transform MLLW to WGS84 Ellipsoid in Norton Sound, AK
transformez run -R -166/-164/63/64 -E 1s -I mllw -O 4979
Transform a raster directly. Transformez reads the bounds/resolution from the file.
transformez run my_dem.tif -I mllw -O 5703
Integrate directly into your download pipeline.
# Download GEBCO and shift EGM96 to WGS84 on the fly
fetchez gebco ... --hook transformez:datum_in=5773,datum_out=4979
Python API
Transformez provides a high-level API for embedding transformations directly into your Python scripts, Jupyter Notebooks, or automated pipelines.
import transformez
# ---------------------------------------------------------
# Generate a Shift Grid
# ---------------------------------------------------------
# Returns a 2D numpy array. Optionally saves to a file.
# Requesting "mllw" in India triggers the Global Fallback (FES2014) automatically.
shift_array = transformez.generate_grid(
region=[80, 85, 10, 15], # [West, East, South, North]
increment="3s", # Grid resolution
datum_in="mllw",
datum_out="4979", # WGS84 Ellipsoid
out_fn="india_shift.tif" # Optional: Save to disk
)
# ---------------------------------------------------------
# Transform an Existing Raster
# ---------------------------------------------------------
# Applies the datum shift directly to a DEM and saves the result.
out_file = transformez.transform_raster(
input_raster="my_dem_mllw.tif",
datum_in="mllw",
datum_out="5703:g2012b", # NAVD88 using specific GEOID12B
output_raster="my_dem_navd88.tif"
)
Supported Datums
🌊 Supported Tidal Surfaces:
| EPSG | NAME | DESC |
|---|---|---|
| 1089 | mllw | [USA] |
| 5866 | mllw | [USA] |
| 1091 | mlw | [USA] |
| 5869 | mhhw | [USA] |
| 5868 | mhw | [USA] |
| 5714 | msl | [USA] |
| 5713 | mtl | [USA] |
| 0 | crd | [USA] |
| 5609 | IGLD85 | [USA] |
| 9000 | LWD_IGLD85 | [USA] |
| 5702 | NGVD29 | [GLOBAL] |
| 9001 | lat | [GLOBAL] |
| 9002 | hat | [GLOBAL] |
| 9003 | mss | [GLOBAL] |
🌐 Ellipsoidal / Frame Datums (EPSG):
| EPSG | NAME | DESC |
|---|---|---|
| 4979 | WGS84 | World Geodetic System 1984 |
| 6319 | NAD83 | North American Datum 1983 |
🏔️ Orthometric / Geoid-Based (EPSG):
| EPSG | NAME | DESC |
|---|---|---|
| 5703 | NAVD88 height | (Default Geoid: g2018) |
| 6360 | NAVD88 height (usFt) | (Default Geoid: g2018) |
| 8228 | NAVD88 height (Ft) | (Default Geoid: g2018) |
| 6641 | PRVD02 height | (Default Geoid: g2018) |
| 6642 | VIVD09 height | (Default Geoid: g2018) |
| 6647 | CGVD2013(CGG2013) | (Default Geoid: CGG2013) |
| 3855 | EGM2008 height | (Default Geoid: egm2008) |
| 5773 | EGM96 height | (Default Geoid: egm96) |
🌍 Available Geoids:
g2018, g2012b, geoid09, xgeoid20b, xgeoid19b, egm2008, egm96, CGG2013
License
This project is licensed under the MIT License - see the LICENSE file for details. Copyright (c) 2010-2026 Regents of the University of Colorado
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file transformez-0.3.2.tar.gz.
File metadata
- Download URL: transformez-0.3.2.tar.gz
- Upload date:
- Size: 29.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7edaf44202d511285e61c343a837229127e4f5bbb0b2d4cf77c18b5fa4444ed
|
|
| MD5 |
52d1e57a28042c6bf5d695f6aeb8b646
|
|
| BLAKE2b-256 |
ef0c9139b4a4297d3b53217629a1d6af615f6430ac140a58e89214df615c4ea1
|
Provenance
The following attestation bundles were made for transformez-0.3.2.tar.gz:
Publisher:
publish.yaml on continuous-dems/transformez
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
transformez-0.3.2.tar.gz -
Subject digest:
f7edaf44202d511285e61c343a837229127e4f5bbb0b2d4cf77c18b5fa4444ed - Sigstore transparency entry: 1189545777
- Sigstore integration time:
-
Permalink:
continuous-dems/transformez@43f7dae1a6b8dd6602e398abee02795c3c40d48f -
Branch / Tag:
refs/tags/v0.3.2 - Owner: https://github.com/continuous-dems
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@43f7dae1a6b8dd6602e398abee02795c3c40d48f -
Trigger Event:
push
-
Statement type:
File details
Details for the file transformez-0.3.2-py3-none-any.whl.
File metadata
- Download URL: transformez-0.3.2-py3-none-any.whl
- Upload date:
- Size: 37.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a449f93778f21f2f230b5b20ec12f64e0581df3c970ac48c8648ea780a2cda28
|
|
| MD5 |
bc0d421a459aac02f9c4ea99a39c2c00
|
|
| BLAKE2b-256 |
5c9ff26c3bb0fb987347f38000962fd98475ceb43d8fa988de9efcc36a8c3eb0
|
Provenance
The following attestation bundles were made for transformez-0.3.2-py3-none-any.whl:
Publisher:
publish.yaml on continuous-dems/transformez
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
transformez-0.3.2-py3-none-any.whl -
Subject digest:
a449f93778f21f2f230b5b20ec12f64e0581df3c970ac48c8648ea780a2cda28 - Sigstore transparency entry: 1189545780
- Sigstore integration time:
-
Permalink:
continuous-dems/transformez@43f7dae1a6b8dd6602e398abee02795c3c40d48f -
Branch / Tag:
refs/tags/v0.3.2 - Owner: https://github.com/continuous-dems
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@43f7dae1a6b8dd6602e398abee02795c3c40d48f -
Trigger Event:
push
-
Statement type: