Package pygeodesy :: Module geoids :: Class GeoidPGM
[frames] | no frames]

Class GeoidPGM

      object --+                
               |                
    named._Named --+            
                   |            
heights._HeightNamed --+        
                       |        
     heights._HeightBase --+    
                           |    
                  _GeoidBase --+
                               |
                              GeoidPGM

Geoid height interpolator for Karney's GeographicLib Earth Gravitational Model (EGM) geoid egm*.pgm datasets but based on SciPy RectBivariateSpline, bisplrep/-ev or interp2d interpolation.

Use any of the egm84-, egm96- or egm2008-*.pgm datasets. However, unless cropped, an entire egm*.pgm dataset is loaded into the SciPy interpolator and converted from 2-byte int to 8-byte dtype float64. Therefore, internal memory usage is 4x the egm*.pgm file size and may exceed the available memory, especially with 32-bit Python, see properties .nBytes and .sizeB.

Instance Methods
 
__init__(self, egm_pgm, crop=None, datum=None, kind=3, smooth=0, **name)
New GeoidPGM interpolator.
 
__call__(self, *llis, **wrap_H)
Interpolate the geoid height for one or several locations.
 
height(self, lats, lons, **wrap)
Interpolate the geoid height for one or several lat-/longitudes.

Inherited from _GeoidBase: __enter__, __exit__, __repr__, __str__, center, close, highest, loweright, lowerleft, lowerright, lowest, outside, toStr, upperleft, upperright

Inherited from named._Named: __imatmul__, __matmul__, __rmatmul__, attrs, classof, copy, dup, methodname, rename, renamed, toRepr, toStr2

Inherited from object: __delattr__, __format__, __getattribute__, __hash__, __new__, __reduce__, __reduce_ex__, __setattr__, __sizeof__, __subclasshook__

Properties

Inherited from _GeoidBase: closed, cropped, dtype, endian, hits, kind, knots, mean, nBytes, name, pgm, sizeB, smooth, stdev, u2B

Inherited from heights._HeightBase: numpy, scipy, scipy_interpolate

Inherited from heights._HeightNamed: datum, kmin, wrap

Inherited from named._Named: classname, classnaming, iteration, named, named2, named3, named4, sizeof

Inherited from object: __class__

Method Details

__init__ (self, egm_pgm, crop=None, datum=None, kind=3, smooth=0, **name)
(Constructor)

 

New GeoidPGM interpolator.

Arguments:
  • egm_pgm - An EGM geoid dataset file name (egm*.pgm).
  • crop - Optional box to crop egm_pgm, a 4-tuple (south, west, north, east) or 2-tuple ((south, west), (north, east)), in degrees90 lat- and degrees180 longitudes or a 2-tuple (LatLonSW, LatLonNE) of LatLon instances.
  • datum - Optional grid datum (Datum, Ellipsoid, Ellipsoid2 or a_f2Tuple), default WGS84.
  • kind - scipy.interpolate order (int), use 1..5 for RectBivariateSpline or -1, -3 or -5 for bisplrep/-ev or interp2d linear, cubic respectively quintic, see note for more details.
  • smooth - Smoothing factor for kind=1..5 only (int).
  • name - Optional geoid name=NN (str).
Raises:
  • GeoidError - EGM dataset egm_pgm issue or invalid crop, kind or smooth.
  • ImportError - Package numpy or scipy not found or not installed.
  • LenError - EGM dataset egm_pgm axis mismatch.
  • SciPyError - A scipy issue.
  • SciPyWarning - A scipy warning as exception.
  • TypeError - Invalid datum or unexpected argument.
Overrides: object.__init__
Notes:
  • Specify kind=-1, -3 or -5 to use scipy.interpolate.interp2d before or scipy.interpolate.bisplrep/-ev since Scipy version 1.14.
  • The GeographicLib egm*.pgm file sizes are based on a 2-byte int height converted to 8-byte dtype float64 for scipy interpolators. Therefore, internal memory usage is 4 times the egm*.pgm file size and may exceed the available memory, especially with 32-bit Python. To reduce memory usage, set keyword argument crop to the region of interest. For example crop=(20, -125, 50, -65) covers the conterminous US (CONUS), less than 3% of the entire egm2008-1.pgm dataset.

See Also: Class GeoidKarney and function egmGeoidHeights.

__call__ (self, *llis, **wrap_H)
(Call operator)

 

Interpolate the geoid height for one or several locations.

Arguments:
  • llis - One or more locations (LatLons), all positional.
  • wrap_H - Keyword arguments wrap=False (bool) and H=False (bool). If wrap is True, wrap or normalize all llis locations. If H is True, return the orthometric height instead of the geoid height at each location.
Returns:
A single interpolated geoid (or orthometric) height (float) or a list or tuple of interpolated geoid (or orthometric) heights (floats).
Raises:
  • GeoidError - Insufficient number of llis, an invalid lli or the egm*.pgm geoid file is closed.
  • RangeError - An lli is outside this geoid's lat- or longitude range.
  • SciPyError - A scipy issue.
  • SciPyWarning - A scipy warning as exception.
Overrides: heights._HeightBase.__call__

Note: To obtain orthometric heights, each llis location must have an ellipsoid height or h attribute, otherwise height=0 is used.

See Also: Function pygeodesy.heightOrthometric.

height (self, lats, lons, **wrap)

 

Interpolate the geoid height for one or several lat-/longitudes.

Arguments:
  • lats - Latitude or latitudes (degrees or degreess).
  • lons - Longitude or longitudes (degrees or degreess).
  • wrap - If True, wrap or normalize all lats and lons locations (bool).
Returns:
A single interpolated geoid height (float) or a list of interpolated geoid heights (floats).
Raises:
  • GeoidError - Insufficient or non-matching number of lats and lons.
  • RangeError - A lat or lon is outside this geoid's lat- or longitude range.
  • SciPyError - A scipy issue.
  • SciPyWarning - A scipy warning as exception.
Overrides: heights._HeightBase.height