Coverage for pygeodesy/azimuthal.py : 95%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# -*- coding: utf-8 -*-
Classes L{Equidistant}, L{EquidistantExact}, L{EquidistantGeodSolve}, L{EquidistantKarney}, L{Gnomonic}, L{GnomonicExact}, L{GnomonicKarney}, L{LambertEqualArea}, L{Orthographic} and L{Stereographic}, classes L{AzimuthalError}, L{Azimuthal7Tuple} and functions L{equidistant} and L{gnomonic}.
L{EquidistantExact} and L{GnomonicExact} are based on exact geodesic L{GeodesicExact} and L{GeodesicLineExact}, Python versions of I{Karney}'s C++ original U{GeodesicExact<https://GeographicLib.SourceForge.io/html/ classGeographicLib_1_1GeodesicExact.html>}, respectively U{GeodesicLineExact <https://GeographicLib.SourceForge.io/html/classGeographicLib_1_1GeodesicLineExact.html>}.
Using L{EquidistantGeodSolve} requires I{Karney}'s utility U{GeodSolve <https://GeographicLib.SourceForge.io/html/GeodSolve.1.html>} to be available and set in env variable C{PYGEODESY_GEODSOLVE}, see module L{geodsolve} for more details.
L{EquidistantKarney} and L{GnomonicKarney} require I{Charles Karney}'s Python U{geographiclib<https://PyPI.org/project/geographiclib>} package to be installed.
Other azimuthal classes implement only (**) U{Snyder's FORMULAS FOR THE SPHERE <https://Pubs.USGS.gov/pp/1395/report.pdf>} and use those for any datum, spherical and ellipsoidal. The radius used for the latter is the ellipsoid's I{mean radius of curvature} at the latitude of the projection center point. For further justification, see the first paragraph under U{Snyder's FORMULAS FOR THE ELLIPSOID, page 197<https://Pubs.USGS.gov/pp/1395/report.pdf>}.
Page numbers in C{Snyder} references apply to U{John P. Snyder, "Map Projections -- A Working Manual", 1987<https://Pubs.USGS.gov/pp/1395/report.pdf>}.
See also U{here<https://WikiPedia.org/wiki/Azimuthal_equidistant_projection>}, especially the U{Comparison of the Azimuthal equidistant projection and some azimuthal projections centred on 90° N at the same scale, ordered by projection altitude in Earth radii<https://WikiPedia.org/wiki/Azimuthal_equidistant_projection #/media/File:Comparison_azimuthal_projections.svg>}. ''' # make sure int/int division yields float quotient, see .basics
# from pygeodesy.formy import antipode # from latlonBase _azimuth_, _datum_, _lat_, _lon_, \ _no_, _scale_, _SPACE_, _x_, _y_, \ _0_0, _0_1, _0_5, _1_0, _2_0, _360_0 property_doc_, property_RO Northing, Scalar, Scalar_ sincos2d, sincos2d_
'''(INTERNAL) Base class for azimuthal projections.
@see: I{Karney}'s C++ class U{AzimuthalEquidistant<https://GeographicLib.SourceForge.io/ html/classGeographicLib_1_1AzimuthalEquidistant.html>} and U{Gnomonic <https://GeographicLib.SourceForge.io/html/classGeographicLib_1_1Gnomonic.html>} or the Python versions L{EquidistantKarney}, respectively L{GnomonicKarney}. '''
'''New azimuthal projection.
@arg lat0: Latitude of the center point (C{degrees90}). @arg lon0: Longitude of the center point (C{degrees180}). @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth radius (C{meter}). @kwarg name: Optional name for the projection (C{str}).
@raise AzimuthalError: Invalid B{C{lat0}}, B{C{lon0}} or (spherical) B{C{datum}}.
@raise TypeError: Invalid B{C{datum}}. '''
'''Get the datum (L{Datum}). '''
'''Get the geodesic's equatorial radius, semi-axis (C{meter}). '''
'''Get the iteration number (C{int}) or C{None} if not available/applicable. '''
'''Get the geodesic's flattening (C{float}). '''
'''(INTERNAL) I{Must be overloaded}, see function C{notOverloaded}. ''' notOverloaded(self, lat, lon, name=name)
'''(INTERNAL) Azimuthal (spherical) forward C{lat, lon} to C{x, y}. '''
else: # 0 or 180 x = y = z = _0_0
name=name or self.name)
'''Get the center latitude (C{degrees90}). '''
'''Get the center lat- and longitude (L{LatLon2Tuple}C{(lat, lon)}) in (C{degrees90}, C{degrees180}). '''
'''Set the center lat- and longitude (C{LatLon}, L{LatLon2Tuple} or L{LatLon4Tuple}).
@raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}} or ellipsoidal mismatch of B{C{latlon0}} and this projection. ''' _datum_datum(self.datum, latlon0.datum, Error=AzimuthalError)
'''Get the center longitude (C{degrees180}). '''
def majoradius(self): # PYCHOK no cover '''DEPRECATED, use property C{equatoradius}.''' return self.equatoradius
'''Get this projection's mean radius of curvature (C{meter}). '''
'''Set or reset the center point of this azimuthal projection.
@arg lat0: Center point latitude (C{degrees90}). @arg lon0: Center point longitude (C{degrees180}).
@raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}}. ''' Lon_(lon0=lon0, Error=AzimuthalError))
'''(INTERNAL) I{Must be overloaded}, see function C{notOverloaded}. ''' notOverloaded(self, x, y, name=name, LatLon=LatLon, **LatLon_kwds)
'''(INTERNAL) Azimuthal (spherical) reverse C{x, y} to C{lat, lon}. '''
else: lon = atan2d(x, (y if s0 < 0 else -y)) else:
name=name or self.name) if LatLon is None else \ self._toLatLon(lat, lon, LatLon, LatLon_kwds, name)
'''(INTERNAL) See iterating functions .ellipsoidalBaseDI._intersect3, .ellipsoidalBaseDI._intersects2 and .ellipsoidalBaseDI._nearestOne. '''
'''(INTERNAL) Check B{C{LatLon}} and return an instance. '''
'''Return a string representation of this projection.
@kwarg prec: Optional number of decimals, unstripped (C{int}).
@return: This projection as C{"<classname>(lat0, lon0, ...)"} (C{str}). '''
'''Return a string representation of this projection.
@kwarg prec: Optional number of decimal, unstripped (C{int}). @kwarg sep: Optional separator to join (C{str}).
@return: This projection as C{"lat0 lon0"} (C{str}). '''
'''An azimuthal L{Equidistant}, L{EquidistantKarney}, L{Gnomonic}, L{LambertEqualArea}, L{Orthographic}, L{Stereographic} or L{Azimuthal7Tuple} issue. '''
'''7-Tuple C{(x, y, lat, lon, azimuth, scale, datum)}, in C{meter}, C{meter}, C{degrees90}, C{degrees180}, compass C{degrees}, C{scalar} and C{Datum} where C{(x, y)} is the easting and northing of a projected point, C{(lat, lon)} the geodetic location, C{azimuth} the azimuth, clockwise from true North and C{scale} is the projection scale, either C{1 / reciprocal} or C{1} or C{-1} in the L{Equidistant} case. '''
'''Return the antipodal C{lat} and C{lon} of this tuple. ''' a = antipode(self.lat, self.lon) # PYCHOK named # b = wrap360(self.azimuth + _180_0) return _NamedTuple.dup(self, lat=a.lat, lon=a.lon) # azimuth=b
'''Azimuthal equidistant projection for the sphere**, see U{Snyder, pp 195-197 <https://Pubs.USGS.gov/pp/1395/report.pdf>} and U{MathWorld-Wolfram <https://MathWorld.Wolfram.com/AzimuthalEquidistantProjection.html>}.
@note: Results from this L{Equidistant} and an L{EquidistantExact}, L{EquidistantGeodSolve} or L{EquidistantKarney} projection C{may differ} by 10% or more. For an example, see method C{testDiscrepancies} in module C{testAzimuthal.py}. ''' if _FOR_DOCS: __init__ = _AzimuthalBase.__init__
'''Convert a geodetic location to azimuthal equidistant east- and northing.
@arg lat: Latitude of the location (C{degrees90}). @arg lon: Longitude of the location (C{degrees180}). @kwarg name: Optional name for the location (C{str}).
@return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)} with easting C{x} and northing C{y} of point in C{meter} and C{lat} and C{lon} in C{degrees} and C{azimuth} clockwise from true North. The C{scale} of the projection is C{1} in I{radial} direction and is C{1 / reciprocal} in the direction perpendicular to this.
@raise AzimuthalError: Invalid B{C{lat}} or B{C{lon}}.
@note: The C{scale} will be C{-1} if B{C{(lat, lon)}} is antipodal to the projection center C{(lat0, lon0)}. ''' else: k = copysign0(_1_0, c)
'''Convert an azimuthal equidistant location to geodetic lat- and longitude.
@arg x: Easting of the location (C{meter}). @arg y: Northing of the location (C{meter}). @kwarg name: Optional name for the location (C{str}). @kwarg LatLon: Class to use (C{LatLon}) or C{None}. @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword arguments, ignored if C{B{LatLon} is None}.
@return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon} in the range C{[-180..180] degrees}. The C{scale} of the projection is C{1} in I{radial} direction, C{azimuth} clockwise from true North and is C{1 / reciprocal} in the direction perpendicular to this. '''
'''Return an L{EquidistantExact}, L{EquidistantGeodSolve} or (if I{Karney}'s U{geographiclib<https://PyPI.org/project/geographiclib>} package is installed) an L{EquidistantKarney}, otherwise an L{Equidistant} instance.
@arg lat0: Latitude of center point (C{degrees90}). @arg lon0: Longitude of center point (C{degrees180}). @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth radius (C{meter}). @kwarg exact: Return an L{EquidistantExact} instance. @kwarg geodsolve: Return an L{EquidistantGeodSolve} instance. @kwarg name: Optional name for the projection (C{str}).
@return: An L{EquidistantExact}, L{EquidistantGeodSolve}, L{EquidistantKarney} or L{Equidistant} instance.
@raise AzimuthalError: Invalid B{C{lat0}}, B{C{lon0}} or (spherical) B{C{datum}}.
@raise TypeError: Invalid B{C{datum}}. ''' return EquidistantExact(lat0, lon0, datum=datum, name=name) return EquidistantGeodSolve(lat0, lon0, datum=datum, name=name) # PYCHOK types except ImportError: return Equidistant(lat0, lon0, datum=datum, name=name) # PYCHOK types
'''(INTERNAL) Base class for azimuthal projections using U{Karney Geodesic <https://GeographicLib.SourceForge.io/html/python/code.html>} or exact geodesic classes L{GeodesicExact} and L{GeodesicLineExact}. '''
'''(INTERNAL) I{Must be overloaded}, see function C{notOverloaded}. ''' notOverloaded(self)
'''(INTERNAL) Return an C{Azimuthal7Tuple}. ''' (r.m12 / r.s12) if r.a12 > _EPS_K else _1_0) name=name or self.name)
'''(INTERNAL) Base for classes L{EquidistantExact}, L{EquidistantGeodSolve} and L{EquidistantKarney}. ''' '''New azimuthal L{EquidistantExact}, L{EquidistantGeodSolve} or L{EquidistantKarney} projection. '''
# g.STANDARD = g.AZIMUTH | g.DISTANCE | g.LATITUDE | g.LONGITUDE
'''Convert an (ellipsoidal) geodetic location to azimuthal equidistant east- and northing.
@arg lat: Latitude of the location (C{degrees90}). @arg lon: Longitude of the location (C{degrees180}). @kwarg name: Optional name for the location (C{str}).
@return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)} with easting C{x} and northing C{y} of point in C{meter} and C{lat} and C{lon} in C{degrees} and C{azimuth} clockwise from true North. The C{scale} of the projection is C{1} in I{radial} direction and is C{1 / reciprocal} in the direction perpendicular to this.
@raise AzimuthalError: Invalid B{C{lat}} or B{C{lon}}.
@note: A call to C{.forward} followed by a call to C{.reverse} will return the original C{lat, lon} to within roundoff. ''' Lat_(lat), Lon_(lon), self._mask)
'''Convert an azimuthal equidistant location to (ellipsoidal) geodetic lat- and longitude.
@arg x: Easting of the location (C{meter}). @arg y: Northing of the location (C{meter}). @kwarg name: Optional name for the location (C{str}). @kwarg LatLon: Class to use (C{LatLon}) or C{None}. @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword arguments, ignored if C{B{LatLon} is None}.
@return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon} in the range C{[-180..180] degrees}. The scale of the projection is C{1} in I{radial} direction, C{azimuth} clockwise from true North and is C{1 / reciprocal} in the direction perpendicular to this. '''
self._toLatLon(r.lat2, r.lon2, LatLon, LatLon_kwds, name)
'''Azimuthal equidistant projection, a Python version of I{Karney}'s C++ class U{AzimuthalEquidistant <https://GeographicLib.SourceForge.io/html/classGeographicLib_1_1AzimuthalEquidistant.html>}, based on exact geodesic classes L{GeodesicExact} and L{GeodesicLineExact}.
An azimuthal equidistant projection is centered at an arbitrary position on the ellipsoid. For a point in projected space C{(x, y)}, the geodesic distance from the center position is C{hypot(x, y)} and the C{azimuth} of the geodesic from the center point is C{atan2(x, y)}, clockwise from true North.
The C{.forward} and C{.reverse} methods also return the C{azimuth} of the geodesic at C{(x, y)} and the C{scale} in the azimuthal direction which, together with the basic properties of the projection, serve to specify completely the local affine transformation between geographic and projected coordinates. ''' '''New azimuthal L{EquidistantExact} projection.
@arg lat0: Latitude of center point (C{degrees90}). @arg lon0: Longitude of center point (C{degrees180}). @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth radius (C{meter}). @kwarg name: Optional name for the projection (C{str}).
@raise AzimuthalError: Invalid B{C{lat0}}, B{C{lon0}} or B{C{datum}}. '''
if _FOR_DOCS: forward = _EquidistantBase.forward reverse = _EquidistantBase.reverse
'''Get this projection's exact geodesic (L{GeodesicExact}). '''
'''Azimuthal equidistant projection, a Python version of I{Karney}'s C++ class U{AzimuthalEquidistant <https://GeographicLib.SourceForge.io/html/classGeographicLib_1_1AzimuthalEquidistant.html>}, based on (exact) geodesic I{wrappers} L{GeodesicSolve} and L{GeodesicLineSolve} and intended I{for testing purposes only}.
@see: L{EquidistantExact} and module L{geodsolve}. ''' '''New azimuthal L{EquidistantGeodSolve} projection.
@arg lat0: Latitude of center point (C{degrees90}). @arg lon0: Longitude of center point (C{degrees180}). @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth radius (C{meter}). @kwarg name: Optional name for the projection (C{str}).
@raise AzimuthalError: Invalid B{C{lat0}}, B{C{lon0}} or B{C{datum}}. '''
if _FOR_DOCS: forward = _EquidistantBase.forward reverse = _EquidistantBase.reverse
'''Get this projection's (exact) geodesic (L{GeodesicSolve}). '''
'''Azimuthal equidistant projection, a Python version of I{Karney}'s C++ class U{AzimuthalEquidistant <https://GeographicLib.SourceForge.io/html/classGeographicLib_1_1AzimuthalEquidistant.html>}, requiring package U{geographiclib<https://PyPI.org/project/geographiclib>} to be installed.
@see: L{EquidistantExact}. ''' '''New azimuthal L{EquidistantKarney} projection.
@arg lat0: Latitude of center point (C{degrees90}). @arg lon0: Longitude of center point (C{degrees180}). @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth radius (C{meter}). @kwarg name: Optional name for the projection (C{str}).
@raise ImportError: Package U{geographiclib<https://PyPI.org/project/geographiclib>} not installed or not found.
@raise AzimuthalError: Invalid B{C{lat0}}, B{C{lon0}} or B{C{datum}}. '''
if _FOR_DOCS: forward = _EquidistantBase.forward reverse = _EquidistantBase.reverse
'''Get this projection's I{wrapped} U{Karney Geodesic <https://GeographicLib.SourceForge.io/html/python/code.html>}, provided package U{geographiclib <https://PyPI.org/project/geographiclib>} is installed. '''
EquidistantKarney) # PYCHOK in .ellipsoidalBaseDI
'''Azimuthal gnomonic projection for the sphere**, see U{Snyder, pp 164-168 <https://Pubs.USGS.gov/pp/1395/report.pdf>} and U{MathWorld-Wolfram <https://MathWorld.Wolfram.com/GnomonicProjection.html>}. ''' if _FOR_DOCS: __init__ = _AzimuthalBase.__init__
'''Convert a geodetic location to azimuthal equidistant east- and northing.
@arg lat: Latitude of the location (C{degrees90}). @arg lon: Longitude of the location (C{degrees180}). @kwarg name: Optional name for the location (C{str}).
@return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)} with easting C{x} and northing C{y} of point in C{meter} and C{lat} and C{lon} in C{degrees} and C{azimuth} clockwise from true North. The C{scale} of the projection is C{1} in I{radial} direction and is C{1 / reciprocal} in the direction perpendicular to this.
@raise AzimuthalError: Invalid B{C{lat}} or B{C{lon}}. '''
'''Convert an azimuthal equidistant location to geodetic lat- and longitude.
@arg x: Easting of the location (C{meter}). @arg y: Northing of the location (C{meter}). @kwarg name: Optional name for the location (C{str}). @kwarg LatLon: Class to use (C{LatLon}) or C{None}. @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword arguments, ignored if C{B{LatLon} is None}.
@return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon} in the range C{[-180..180] degrees}. The C{scale} of the projection is C{1} in I{radial} direction, C{azimuth} clockwise from true North and C{1 / reciprocal} in the direction perpendicular to this. '''
'''Return a L{GnomonicExact} or (if I{Karney}'s U{geographiclib <https://PyPI.org/project/geographiclib>} package is installed) a L{GnomonicKarney}, otherwise a L{Gnomonic} instance.
@arg lat0: Latitude of center point (C{degrees90}). @arg lon0: Longitude of center point (C{degrees180}). @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth radius (C{meter}). @kwarg exact: Return a L{GnomonicExact} instance. @kwarg geodsolve: Return an L{GnomonicGeodSolve} instance. @kwarg name: Optional name for the projection (C{str}).
@return: A L{GnomonicExact}, L{GnomonicGeodSolve}, L{GnomonicKarney} or L{Gnomonic} instance.
@raise AzimuthalError: Invalid B{C{lat0}}, B{C{lon0}} or (spherical) B{C{datum}}.
@raise TypeError: Invalid B{C{datum}}. ''' return GnomonicExact(lat0, lon0, datum=datum, name=name) return GnomonicGeodSolve(lat0, lon0, datum=datum, name=name) # PYCHOK types except ImportError: return Gnomonic(lat0, lon0, datum=datum, name=name) # PYCHOK types
'''(INTERNAL) Base for classes L{GnomonicExact} and L{GnomonicKarney}. ''' '''New azimuthal L{GnomonicExact} or L{GnomonicKarney} projection. '''
'''Convert an (ellipsoidal) geodetic location to azimuthal gnomonic east- and northing.
@arg lat: Latitude of the location (C{degrees90}). @arg lon: Longitude of the location (C{degrees180}). @kwarg name: Optional name for the location (C{str}). @kwarg raiser: Do or don't throw an error (C{bool}) if the location lies over the horizon.
@return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)} with easting C{x} and northing C{y} of point in C{meter} and C{lat} and C{lon} in C{degrees} and C{azimuth} clockwise from true North. The C{scale} of the projection is C{1 / reciprocal**2} in I{radial} direction and C{1 / reciprocal} in the direction perpendicular to this. Both C{x} and C{y} will be C{NAN} if the (geodetic) location lies over the horizon and C{B{raiser}=False}.
@raise AzimuthalError: Invalid B{C{lat}}, B{C{lon}} or the location lies over the horizon and C{B{raiser}=True}. '''
Lat_(lat), Lon_(lon), self._mask) elif raiser: raise AzimuthalError(lat=lat, lon=lon, txt=_over_horizon_) else: x = y = NAN
'''Convert an azimuthal gnomonic location to (ellipsoidal) geodetic lat- and longitude.
@arg x: Easting of the location (C{meter}). @arg y: Northing of the location (C{meter}). @kwarg name: Optional name for the location (C{str}). @kwarg LatLon: Class to use (C{LatLon}) or C{None}. @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword arguments, ignored if C{B{LatLon} is None}.
@return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@raise AzimuthalError: No convergence.
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon} in the range C{[-180..180] degrees}. The C{azimuth} is clockwise from true North. The scale is C{1 / reciprocal**2} in C{radial} direction and C{1 / reciprocal} in the direction perpendicular to this. '''
def _d(r, q): return (r.M12 - q * r.m12) * r.m12 # negated q = _1_0 / q else: # little == True
else: raise AzimuthalError(x=x, y=y, txt=_no_(Fmt.convergence(e)))
self._toLatLon(r.lat2, r.lon2, LatLon, LatLon_kwds, name)
'''Azimuthal gnomonic projection, a Python version of I{Karney}'s C++ class U{Gnomonic <https://GeographicLib.SourceForge.io/html/classGeographicLib_1_1Gnomonic.html>}, based on exact geodesic classes L{GeodesicExact} and L{GeodesicLineExact}.
@see: I{Karney}'s U{Detailed Description<https://GeographicLib.SourceForge.io/html/ classGeographicLib_1_1Gnomonic.html>}, especially the B{Warning}. ''' '''New azimuthal L{GnomonicExact} projection.
@arg lat0: Latitude of center point (C{degrees90}). @arg lon0: Longitude of center point (C{degrees180}). @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth radius (C{meter}). @kwarg name: Optional name for the projection (C{str}).
@raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}}. '''
if _FOR_DOCS: forward = _GnomonicBase.forward reverse = _GnomonicBase.reverse
'''Get this projection's exact geodesic (L{GeodesicExact}). '''
'''Azimuthal gnomonic projection, a Python version of I{Karney}'s C++ class U{Gnomonic <https://GeographicLib.SourceForge.io/html/classGeographicLib_1_1Gnomonic.html>}, based on (exact) geodesic I{wrappers} L{GeodesicSolve} and L{GeodesicLineSolve} and intended I{for testing purposes only}.
@see: L{GnomonicExact} and module L{geodsolve}. ''' '''New azimuthal L{GnomonicGeodSolve} projection.
@arg lat0: Latitude of center point (C{degrees90}). @arg lon0: Longitude of center point (C{degrees180}). @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth radius (C{meter}). @kwarg name: Optional name for the projection (C{str}).
@raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}}. '''
if _FOR_DOCS: forward = _GnomonicBase.forward reverse = _GnomonicBase.reverse
'''Get this projection's (exact) geodesic (L{GeodesicSolve}). '''
'''Azimuthal gnomonic projection, a Python version of I{Karney}'s C++ class U{Gnomonic <https://GeographicLib.SourceForge.io/html/classGeographicLib_1_1Gnomonic.html>}, requiring package U{geographiclib<https://PyPI.org/project/geographiclib>} to be installed.
@see: L{GnomonicExact}. ''' '''New azimuthal L{GnomonicKarney} projection.
@arg lat0: Latitude of center point (C{degrees90}). @arg lon0: Longitude of center point (C{degrees180}). @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth radius (C{meter}). @kwarg name: Optional name for the projection (C{str}).
@raise ImportError: Package U{geographiclib<https://PyPI.org/project/geographiclib>} not installed or not found.
@raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}}. '''
if _FOR_DOCS: forward = _GnomonicBase.forward reverse = _GnomonicBase.reverse
'''Get this projection's I{wrapped} U{Karney Geodesic <https://GeographicLib.SourceForge.io/html/python/code.html>}, provided package U{geographiclib <https://PyPI.org/project/geographiclib>} is installed. '''
'''Lambert-equal-area projection for the sphere** (aka U{Lambert zenithal equal-area projection<https://WikiPedia.org/wiki/Lambert_azimuthal_equal-area_projection>}, see U{Snyder, pp 185-187<https://Pubs.USGS.gov/pp/1395/report.pdf>} and U{MathWorld-Wolfram <https://MathWorld.Wolfram.com/LambertAzimuthalEqual-AreaProjection.html>}. ''' if _FOR_DOCS: __init__ = _AzimuthalBase.__init__
'''Convert a geodetic location to azimuthal Lambert-equal-area east- and northing.
@arg lat: Latitude of the location (C{degrees90}). @arg lon: Longitude of the location (C{degrees180}). @kwarg name: Optional name for the location (C{str}).
@return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)} with easting C{x} and northing C{y} of point in C{meter} and C{lat} and C{lon} in C{degrees} and C{azimuth} clockwise from true North. The C{scale} of the projection is C{1} in I{radial} direction and is C{1 / reciprocal} in the direction perpendicular to this.
@raise AzimuthalError: Invalid B{C{lat}} or B{C{lon}}. '''
'''Convert an azimuthal Lambert-equal-area location to geodetic lat- and longitude.
@arg x: Easting of the location (C{meter}). @arg y: Northing of the location (C{meter}). @kwarg name: Optional name for the location (C{str}). @kwarg LatLon: Class to use (C{LatLon}) or C{None}. @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword arguments, ignored if C{B{LatLon} is None}.
@return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon} in the range C{[-180..180] degrees}. The C{scale} of the projection is C{1} in I{radial} direction, C{azimuth} clockwise from true North and is C{1 / reciprocal} in the direction perpendicular to this. '''
'''Orthographic projection for the sphere**, see U{Snyder, pp 148-153 <https://Pubs.USGS.gov/pp/1395/report.pdf>} and U{MathWorld-Wolfram <https://MathWorld.Wolfram.com/OrthographicProjection.html>}. ''' if _FOR_DOCS: __init__ = _AzimuthalBase.__init__
'''Convert a geodetic location to azimuthal orthographic east- and northing.
@arg lat: Latitude of the location (C{degrees90}). @arg lon: Longitude of the location (C{degrees180}). @kwarg name: Optional name for the location (C{str}).
@return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)} with easting C{x} and northing C{y} of point in C{meter} and C{lat} and C{lon} in C{degrees} and C{azimuth} clockwise from true North. The C{scale} of the projection is C{1} in I{radial} direction and is C{1 / reciprocal} in the direction perpendicular to this.
@raise AzimuthalError: Invalid B{C{lat}} or B{C{lon}}. '''
'''Convert an azimuthal orthographic location to geodetic lat- and longitude.
@arg x: Easting of the location (C{meter}). @arg y: Northing of the location (C{meter}). @kwarg name: Optional name for the location (C{str}). @kwarg LatLon: Class to use (C{LatLon}) or C{None}. @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword arguments, ignored if C{B{LatLon} is None}.
@return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon} in the range C{[-180..180] degrees}. The C{scale} of the projection is C{1} in I{radial} direction, C{azimuth} clockwise from true North and is C{1 / reciprocal} in the direction perpendicular to this. '''
'''Stereographic projection for the sphere**, see U{Snyder, pp 157-160 <https://Pubs.USGS.gov/pp/1395/report.pdf>} and U{MathWorld-Wolfram <https://MathWorld.Wolfram.com/StereographicProjection.html>}. '''
if _FOR_DOCS: __init__ = _AzimuthalBase.__init__
'''Convert a geodetic location to azimuthal stereographic east- and northing.
@arg lat: Latitude of the location (C{degrees90}). @arg lon: Longitude of the location (C{degrees180}). @kwarg name: Optional name for the location (C{str}).
@return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)} with easting C{x} and northing C{y} of point in C{meter} and C{lat} and C{lon} in C{degrees} and C{azimuth} clockwise from true North. The C{scale} of the projection is C{1} in I{radial} direction and is C{1 / reciprocal} in the direction perpendicular to this.
@raise AzimuthalError: Invalid B{C{lat}} or B{C{lon}}. '''
'''Get the central scale factor (C{scalar}). '''
'''Set the central scale factor (C{scalar}). '''
'''Convert an azimuthal stereographic location to geodetic lat- and longitude.
@arg x: Easting of the location (C{meter}). @arg y: Northing of the location (C{meter}). @kwarg name: Optional name for the location (C{str}). @kwarg LatLon: Class to use (C{LatLon}) or C{None}. @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword arguments, ignored if C{B{LatLon} is None}.
@return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon} in the range C{[-180..180] degrees}. The C{scale} of the projection is C{1} in I{radial} direction, C{azimuth} clockwise from true North and is C{1 / reciprocal} in the direction perpendicular to this. '''
# **) MIT License # # Copyright (C) 2016-2022 -- mrJean1 at Gmail -- All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), # to deal in the Software without restriction, including without limitation # the rights to use, copy, modify, merge, publish, distribute, sublicense, # and/or sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. |