[PROJ] Read vertical deflection from egm (96, 08, etc.)
Charles Karney
charles.karney at sri.com
Wed Jun 26 07:27:10 PDT 2019
There are two problems here:
(1) you are numerically differentiating a noisy function, the height of
the geoid found by interpolating into a grid of values.
(2) the geoid is a surface of constant gravitional potential, however
the gravity vector is not normal to it! This is because the geoid goes
under the land mass of the earth.
I recommend using the full gravity model to determine the vertical
deflection. GeographicLib's GravityModel class gives you the tools to
do this.
Note: GeographicLib used to allow you to compute the gradient of the
geoid along the lines you suggest. However, I took this functionality
out in 2016 (version 1.46) because of the shortcomings listed above.
--Charles
On 6/26/19 10:13 AM, Fabian Gross wrote:
> Dear proj-members,
>
> is there a way to read the vertical deflection (xi, eta) directly with
> proj?
>
> My work-around is sampling the geoid-grid shift:
>
> ```python
> *def *get_vertical_deflection(lon, lat):
> /"""
> take origin and 1 east + 1 north on GEOID, transform to topocentric
> and check
> /*:param*/lon: longitude of point of interest on WGS84 (°)
> /*:param*/lat: latitude of point of interest on WGS84 (°)
> /*:return*/: (xi, eta) deflection in meridional and prime vertical (rad)
> """
> /eps = 0.0001 /# °
> /lons = np.array([lon, lon + eps, lon])
> lats = np.array([lat, lat, lat + eps])
> geoid_heights = get_geoid_height_egm96(lons, lats)
>
> /# W. E. Featherstone, "The Use and Abuse of Vertical Deflection" p. 4
> /e = eccentricity(f_wgs84)
> phi = np.deg2rad(lat)
>
> /# meridional, north/south
> # R_M, should be radius of curvature in the meridian at point of
> interest
> /rad_meridian = get_radius_of_curvature_meridian(a_wgs84, e, phi)
> /# d_North = R d_lat; in rad
> /xi = -(geoid_heights[2] - geoid_heights[0])/(rad_meridian *
> np.deg2rad(eps))
>
> /# prime vertical, east/west
> # R_N, should be radius of curvature in the prime vertical at point
> of interest
> /rad_prime_vertical = get_radius_of_curvature_prime_vertical(a_wgs84, e,
> phi)
> /# d_East = R cos(lat) d_long; in rad
> /eta = -(geoid_heights[1] - geoid_heights[0])/(rad_prime_vertical *
> np.deg2rad(eps) * np.cos(phi))
> *return *xi, eta
>
> ```
> Over which (arc) distance should I sample the geoid gtx?
>
> Kind regards
>
> Fabian Gross
> Telefon +49 (711) 648 71-995
> _________________________________________________*
> sbp* *
> schlaich
> bergermann partner*
>
> Beratende Ingenieure
> für erneuerbare Energie
>
> Stuttgart . Berlin . New York
> São Paulo . Shanghai . Paris
> *
> sbp sonne gmbh*
>
> Markus Balz Dipl.Ing. (FH)
> Andreas Keil Dipl.Ing.
>
> Schwabstrasse 43
> 70197 Stuttgart
> Telefon +49 (711) 648 71-0
> _
> __www.sbp.de_ <http://www.sbp.de/>
> _________________________________________________
>
> _______________________________________________
> PROJ mailing list
> PROJ at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/proj
>
More information about the PROJ
mailing list