vibeproj.helmert

Helmert 7-parameter datum transformation.

Transforms geodetic coordinates between two ellipsoids via geocentric (ECEF) intermediate using the Position Vector convention (EPSG method 9606).

Pipeline: geodetic(src) -> ECEF -> Helmert rotate/translate/scale -> ECEF -> geodetic(dst)

Attributes

Classes

HelmertParams

Helmert 7-parameter datum transformation (Position Vector convention).

Functions

geodetic_to_ecef(lat_rad, lon_rad, a, es, xp[, h])

Convert geodetic (lat, lon in radians) to ECEF (X, Y, Z) in meters.

ecef_to_geodetic(X, Y, Z, a, es, xp[, return_height])

Convert ECEF (X, Y, Z) to geodetic (lat, lon in radians).

apply_helmert(lat_deg, lon_deg, params, xp[, h])

Apply Helmert 7-parameter datum shift.

Module Contents

vibeproj.helmert.DEG_TO_RAD = 0.017453292519943295
vibeproj.helmert.RAD_TO_DEG = 57.29577951308232
class vibeproj.helmert.HelmertParams

Helmert 7-parameter datum transformation (Position Vector convention).

Parameters are always stored in Position Vector convention. Coordinate Frame convention rotations are negated at extraction time.

tx: float
ty: float
tz: float
rx: float
ry: float
rz: float
ds: float
src_ellipsoid: vibeproj.ellipsoid.Ellipsoid
dst_ellipsoid: vibeproj.ellipsoid.Ellipsoid
dtx: float = 0.0
dty: float = 0.0
dtz: float = 0.0
drx: float = 0.0
dry: float = 0.0
drz: float = 0.0
dds: float = 0.0
t_epoch: float = 0.0
property has_rates: bool

True if time-dependent rate parameters are present.

at_epoch(epoch: float) HelmertParams

Compute effective 7-parameter transformation at a given epoch.

Folds the rate terms into the base parameters:

param_eff = param + rate * (epoch - t_epoch)

Returns a standard (non-time-dependent) HelmertParams with rates zeroed.

inverted() HelmertParams

Return the inverse transformation (swap src/dst, negate params).

vibeproj.helmert.geodetic_to_ecef(lat_rad, lon_rad, a, es, xp, h=None)

Convert geodetic (lat, lon in radians) to ECEF (X, Y, Z) in meters.

Parameters

lat_rad, lon_radarray_like

Geodetic coordinates in radians.

afloat

Semi-major axis.

esfloat

First eccentricity squared.

xpmodule

Array module (numpy or cupy).

harray_like, optional

Ellipsoidal height in meters. When None, height=0 (exact current behavior).

Returns

X, Y, Zarrays

ECEF coordinates in meters.

vibeproj.helmert.ecef_to_geodetic(X, Y, Z, a, es, xp, return_height=False)

Convert ECEF (X, Y, Z) to geodetic (lat, lon in radians).

Uses iterative Bowring method (converges in ~3 iterations for sub-mm).

Parameters

X, Y, Zarray_like

ECEF coordinates in meters.

afloat

Semi-major axis.

esfloat

First eccentricity squared.

xpmodule

Array module (numpy or cupy).

return_heightbool, optional

When True, recover and return ellipsoidal height. Default False.

Returns

lat_rad, lon_rad, htuple

Geodetic coordinates in radians and ellipsoidal height in meters. h is None when return_height is False.

vibeproj.helmert.apply_helmert(lat_deg, lon_deg, params: HelmertParams, xp, h=None)

Apply Helmert 7-parameter datum shift.

Parameters

lat_deg, lon_degarray_like

Geodetic coordinates in degrees on the source ellipsoid.

paramsHelmertParams

Transformation parameters (Position Vector convention).

xpmodule

Array module (numpy or cupy).

harray_like, optional

Ellipsoidal height in meters. When provided, height is transformed through the ECEF intermediate and recovered on the destination ellipsoid.

Returns

lat_deg_out, lon_deg_outarrays

Geodetic coordinates in degrees on the destination ellipsoid.

h_outarrays (only when h is not None)

Transformed ellipsoidal height in meters.