pygeodesy 24.5.15__py2.py3-none-any.whl → 24.6.1__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. {PyGeodesy-24.5.15.dist-info → PyGeodesy-24.6.1.dist-info}/METADATA +6 -5
  2. PyGeodesy-24.6.1.dist-info/RECORD +116 -0
  3. pygeodesy/__init__.py +4 -4
  4. pygeodesy/albers.py +41 -41
  5. pygeodesy/auxilats/__init__.py +1 -1
  6. pygeodesy/auxilats/__main__.py +2 -2
  7. pygeodesy/auxilats/auxAngle.py +32 -31
  8. pygeodesy/auxilats/auxLat.py +80 -51
  9. pygeodesy/azimuthal.py +123 -124
  10. pygeodesy/basics.py +46 -10
  11. pygeodesy/booleans.py +13 -14
  12. pygeodesy/cartesianBase.py +25 -23
  13. pygeodesy/clipy.py +3 -3
  14. pygeodesy/constants.py +3 -3
  15. pygeodesy/css.py +50 -42
  16. pygeodesy/datums.py +42 -41
  17. pygeodesy/deprecated/functions.py +9 -3
  18. pygeodesy/dms.py +6 -6
  19. pygeodesy/ecef.py +41 -41
  20. pygeodesy/ellipsoidalBase.py +41 -41
  21. pygeodesy/ellipsoidalBaseDI.py +3 -4
  22. pygeodesy/ellipsoidalGeodSolve.py +2 -2
  23. pygeodesy/ellipsoidalKarney.py +3 -3
  24. pygeodesy/ellipsoidalNvector.py +11 -12
  25. pygeodesy/ellipsoids.py +45 -38
  26. pygeodesy/elliptic.py +3 -4
  27. pygeodesy/epsg.py +4 -3
  28. pygeodesy/errors.py +52 -20
  29. pygeodesy/etm.py +68 -65
  30. pygeodesy/fmath.py +44 -49
  31. pygeodesy/formy.py +129 -115
  32. pygeodesy/frechet.py +118 -103
  33. pygeodesy/fstats.py +21 -14
  34. pygeodesy/fsums.py +124 -80
  35. pygeodesy/gars.py +10 -9
  36. pygeodesy/geodesicw.py +19 -17
  37. pygeodesy/geodesicx/__init__.py +1 -1
  38. pygeodesy/geodesicx/__main__.py +2 -2
  39. pygeodesy/geodesicx/gx.py +39 -33
  40. pygeodesy/geodesicx/gxarea.py +12 -9
  41. pygeodesy/geodesicx/gxbases.py +3 -4
  42. pygeodesy/geodesicx/gxline.py +6 -8
  43. pygeodesy/geodsolve.py +29 -28
  44. pygeodesy/geohash.py +60 -57
  45. pygeodesy/geoids.py +34 -32
  46. pygeodesy/hausdorff.py +114 -101
  47. pygeodesy/heights.py +137 -130
  48. pygeodesy/internals.py +16 -11
  49. pygeodesy/interns.py +3 -6
  50. pygeodesy/iters.py +19 -17
  51. pygeodesy/karney.py +21 -17
  52. pygeodesy/ktm.py +25 -18
  53. pygeodesy/latlonBase.py +12 -11
  54. pygeodesy/lazily.py +6 -6
  55. pygeodesy/lcc.py +24 -25
  56. pygeodesy/ltp.py +143 -113
  57. pygeodesy/ltpTuples.py +207 -150
  58. pygeodesy/mgrs.py +26 -26
  59. pygeodesy/named.py +172 -90
  60. pygeodesy/namedTuples.py +33 -25
  61. pygeodesy/nvectorBase.py +8 -8
  62. pygeodesy/osgr.py +40 -48
  63. pygeodesy/points.py +18 -18
  64. pygeodesy/props.py +29 -16
  65. pygeodesy/rhumb/__init__.py +1 -1
  66. pygeodesy/rhumb/aux_.py +13 -15
  67. pygeodesy/rhumb/bases.py +12 -5
  68. pygeodesy/rhumb/ekx.py +24 -18
  69. pygeodesy/rhumb/solve.py +13 -10
  70. pygeodesy/simplify.py +16 -16
  71. pygeodesy/solveBase.py +18 -18
  72. pygeodesy/sphericalBase.py +17 -21
  73. pygeodesy/sphericalTrigonometry.py +21 -21
  74. pygeodesy/streprs.py +5 -5
  75. pygeodesy/trf.py +13 -11
  76. pygeodesy/triaxials.py +68 -64
  77. pygeodesy/units.py +35 -35
  78. pygeodesy/unitsBase.py +24 -11
  79. pygeodesy/ups.py +66 -70
  80. pygeodesy/utily.py +3 -3
  81. pygeodesy/utm.py +183 -187
  82. pygeodesy/utmups.py +38 -38
  83. pygeodesy/utmupsBase.py +104 -106
  84. pygeodesy/vector2d.py +6 -7
  85. pygeodesy/vector3d.py +16 -17
  86. pygeodesy/vector3dBase.py +4 -5
  87. pygeodesy/webmercator.py +43 -51
  88. PyGeodesy-24.5.15.dist-info/RECORD +0 -116
  89. {PyGeodesy-24.5.15.dist-info → PyGeodesy-24.6.1.dist-info}/WHEEL +0 -0
  90. {PyGeodesy-24.5.15.dist-info → PyGeodesy-24.6.1.dist-info}/top_level.txt +0 -0
pygeodesy/azimuthal.py CHANGED
@@ -43,9 +43,8 @@ altitude in Earth radii<https://WikiPedia.org/wiki/Azimuthal_equidistant_project
43
43
  from __future__ import division as _; del _ # PYCHOK semicolon
44
44
 
45
45
  # from pygeodesy.basics import _xinstanceof # from .ellipsoidalBase
46
- from pygeodesy.constants import EPS, EPS0, EPS1, NAN, isnon0, \
47
- _EPStol, _umod_360, _0_0, _0_1, \
48
- _0_5, _1_0, _N_1_0, _2_0
46
+ from pygeodesy.constants import EPS, EPS0, EPS1, NAN, isnon0, _umod_360, \
47
+ _EPStol, _0_0, _0_1, _0_5, _1_0, _N_1_0, _2_0
49
48
  from pygeodesy.ellipsoidalBase import LatLonEllipsoidalBase as _LLEB, \
50
49
  _xinstanceof
51
50
  from pygeodesy.datums import _spherical_datum, _WGS84
@@ -53,12 +52,12 @@ from pygeodesy.errors import _ValueError, _xdatum, _xkwds
53
52
  from pygeodesy.fmath import euclid, hypot as _hypot, Fsum
54
53
  # from pygeodesy.fsums import Fsum # from .fmath
55
54
  # from pygeodesy.formy import antipode # _MODS
56
- from pygeodesy.interns import NN, _azimuth_, _datum_, _lat_, _lon_, \
57
- _scale_, _SPACE_, _x_, _y_
55
+ from pygeodesy.interns import _azimuth_, _datum_, _lat_, _lon_, _scale_, \
56
+ _SPACE_, _x_, _y_
58
57
  from pygeodesy.karney import _norm180
59
58
  from pygeodesy.latlonBase import _MODS, LatLonBase as _LLB
60
59
  from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _FOR_DOCS # ALL_MODS
61
- from pygeodesy.named import _NamedBase, _NamedTuple, _Pass
60
+ from pygeodesy.named import _name__, _name2__, _NamedBase, _NamedTuple, _Pass
62
61
  from pygeodesy.namedTuples import LatLon2Tuple, LatLon4Tuple
63
62
  from pygeodesy.props import deprecated_Property_RO, Property_RO, \
64
63
  property_doc_, _update_all
@@ -71,7 +70,7 @@ from pygeodesy.utily import asin1, atan1, atan2b, atan2d, sincos2, \
71
70
  from math import acos, atan2, degrees, fabs, sin, sqrt
72
71
 
73
72
  __all__ = _ALL_LAZY.azimuthal
74
- __version__ = '24.04.07'
73
+ __version__ = '24.05.24'
75
74
 
76
75
  _EPS_K = _EPStol * _0_1 # Karney's eps_ or _EPSmin * _0_1?
77
76
  _over_horizon_ = 'over horizon'
@@ -91,15 +90,15 @@ class _AzimuthalBase(_NamedBase):
91
90
  '''(INTERNAL) Base class for azimuthal projections.
92
91
 
93
92
  @see: I{Karney}'s C++ class U{AzimuthalEquidistant<https://GeographicLib.SourceForge.io/
94
- C++/doc/classGeographicLib_1_1AzimuthalEquidistant.html>} and U{Gnomonic
95
- <https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1Gnomonic.html>} or the
96
- C{PyGeodesy} versions thereof L{EquidistantKarney} respectively L{GnomonicKarney}.
93
+ C++/doc/classGeographicLib_1_1AzimuthalEquidistant.html>} and U{Gnomonic
94
+ <https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1Gnomonic.html>} or
95
+ the C{PyGeodesy} versions thereof L{EquidistantKarney} respectively L{GnomonicKarney}.
97
96
  '''
98
97
  _datum = _WGS84 # L{Datum}
99
98
  _latlon0 = LatLon2Tuple(_0_0, _0_0) # lat0, lon0 (L{LatLon2Tuple})
100
99
  _sc0 = _0_0, _1_0 # 2-Tuple C{sincos2d(lat0)}
101
100
 
102
- def __init__(self, lat0, lon0, datum=None, name=NN):
101
+ def __init__(self, lat0, lon0, datum=None, **name):
103
102
  '''New azimuthal projection.
104
103
 
105
104
  @arg lat0: Latitude of the center point (C{degrees90}).
@@ -107,14 +106,14 @@ class _AzimuthalBase(_NamedBase):
107
106
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
108
107
  L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth
109
108
  radius (C{meter}).
110
- @kwarg name: Optional name for the projection (C{str}).
109
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
111
110
 
112
111
  @raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}} or (spherical) B{C{datum}}.
113
112
 
114
113
  @raise TypeError: Invalid B{C{datum}}.
115
114
  '''
116
115
  if datum not in (None, self._datum):
117
- self._datum = _spherical_datum(datum, name=name)
116
+ self._datum = _spherical_datum(datum, **name)
118
117
  if name:
119
118
  self.name = name
120
119
 
@@ -143,9 +142,9 @@ class _AzimuthalBase(_NamedBase):
143
142
 
144
143
  f = flattening
145
144
 
146
- def forward(self, lat, lon, name=NN): # PYCHOK no cover
145
+ def forward(self, lat, lon, **name): # PYCHOK no cover
147
146
  '''I{Must be overloaded}.'''
148
- self._notOverloaded(lat, lon, name=name)
147
+ self._notOverloaded(lat, lon, **name)
149
148
 
150
149
  def _forward(self, lat, lon, name, _k_t_2):
151
150
  '''(INTERNAL) Azimuthal (spherical) forward C{lat, lon} to C{x, y}.
@@ -164,7 +163,7 @@ class _AzimuthalBase(_NamedBase):
164
163
  e = n = z = _0_0
165
164
 
166
165
  t = Azimuthal7Tuple(e, n, lat, lon, z, k, self.datum,
167
- name=name or self.name)
166
+ name=self._name__(name))
168
167
  return t
169
168
 
170
169
  def _forwards(self, *lls):
@@ -234,11 +233,11 @@ class _AzimuthalBase(_NamedBase):
234
233
  Lon_(lon0=lon0, Error=AzimuthalError))
235
234
  self._sc0 = sincos2d(self.lat0)
236
235
 
237
- def reverse(self, x, y, name=NN, **LatLon_and_kwds): # PYCHOK no cover
236
+ def reverse(self, x, y, LatLon=None, **name_LatLon_kwds): # PYCHOK no cover
238
237
  '''I{Must be overloaded}.'''
239
- self._notOverloaded(x, y, name=name, **LatLon_and_kwds)
238
+ self._notOverloaded(x, y, LatLon=LatLon, **name_LatLon_kwds)
240
239
 
241
- def _reverse(self, x, y, name, _c, lea, LatLon=None, **LatLon_kwds):
240
+ def _reverse(self, x, y, _c, lea, LatLon, **name_LatLon_kwds):
242
241
  '''(INTERNAL) Azimuthal (spherical) reverse C{x, y} to C{lat, lon}.
243
242
  '''
244
243
  e, n, z, r = _enzh4(x, y)
@@ -262,10 +261,10 @@ class _AzimuthalBase(_NamedBase):
262
261
  lon = _norm180(self.lon0 + d)
263
262
 
264
263
  if LatLon is None:
265
- t = Azimuthal7Tuple(e, n, lat, lon, z, k, self.datum,
266
- name=name or self.name)
264
+ t, _ = _name2__(name_LatLon_kwds, _or_nameof=self)
265
+ t = Azimuthal7Tuple(e, n, lat, lon, z, k, self.datum, name=t)
267
266
  else:
268
- t = self._toLatLon(lat, lon, LatLon, LatLon_kwds, name)
267
+ t = self._toLatLon(lat, lon, LatLon, name_LatLon_kwds)
269
268
  return t
270
269
 
271
270
  def _reverse2(self, x_t, *y):
@@ -276,11 +275,11 @@ class _AzimuthalBase(_NamedBase):
276
275
  d = euclid(t.lat - self.lat0, t.lon - self.lon0) # degrees
277
276
  return t, d
278
277
 
279
- def _toLatLon(self, lat, lon, LatLon, LatLon_kwds, name):
278
+ def _toLatLon(self, lat, lon, LatLon, name_LatLon_kwds):
280
279
  '''(INTERNAL) Check B{C{LatLon}} and return an instance.
281
280
  '''
282
- kwds = _xkwds(LatLon_kwds, datum=self.datum)
283
- r = self._xnamed(LatLon(lat, lon, **kwds), name=name) # handle .classof
281
+ kwds = _xkwds(name_LatLon_kwds, datum=self.datum, _or_nameof=self)
282
+ r = LatLon(lat, lon, **kwds) # handle .classof
284
283
  B = _LLEB if self.datum.isEllipsoidal else _LLB
285
284
  _xinstanceof(B, LatLon=r)
286
285
  return r
@@ -350,12 +349,12 @@ class Equidistant(_AzimuthalBase):
350
349
  if _FOR_DOCS:
351
350
  __init__ = _AzimuthalBase.__init__
352
351
 
353
- def forward(self, lat, lon, name=NN):
352
+ def forward(self, lat, lon, **name):
354
353
  '''Convert a geodetic location to azimuthal equidistant east- and northing.
355
354
 
356
355
  @arg lat: Latitude of the location (C{degrees90}).
357
356
  @arg lon: Longitude of the location (C{degrees180}).
358
- @kwarg name: Optional name for the location (C{str}).
357
+ @kwarg name: Optional C{B{name}=NN} for the location (C{str}).
359
358
 
360
359
  @return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}
361
360
  with easting C{x} and northing C{y} of point in C{meter} and C{lat}
@@ -380,15 +379,15 @@ class Equidistant(_AzimuthalBase):
380
379
 
381
380
  return self._forward(lat, lon, name, _k_t)
382
381
 
383
- def reverse(self, x, y, name=NN, **LatLon_and_kwds):
382
+ def reverse(self, x, y, LatLon=None, **name_LatLon_kwds):
384
383
  '''Convert an azimuthal equidistant location to geodetic lat- and longitude.
385
384
 
386
385
  @arg x: Easting of the location (C{meter}).
387
386
  @arg y: Northing of the location (C{meter}).
388
- @kwarg name: Optional name for the location (C{str}).
389
- @kwarg LatLon_and_kwds: Optional, C{B{LatLon}=None} class to use and
390
- additional B{C{LatLon}} keyword arguments,
391
- ignored if C{B{LatLon} is None} or not given.
387
+ @kwarg LatLon: Class to use (C{LatLon}) or C{None}.
388
+ @kwarg name_LatLon_kwds: Optional C{B{name}=NN} forthe location and
389
+ optional, additional B{C{LatLon}} keyword arguments,
390
+ ignored if C{B{LatLon} is None}.
392
391
 
393
392
  @return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an
394
393
  L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@@ -402,10 +401,10 @@ class Equidistant(_AzimuthalBase):
402
401
  def _c(c):
403
402
  return c if c > EPS else None
404
403
 
405
- return self._reverse(x, y, name, _c, False, **LatLon_and_kwds)
404
+ return self._reverse(x, y, _c, False, LatLon, **name_LatLon_kwds)
406
405
 
407
406
 
408
- def equidistant(lat0, lon0, datum=_WGS84, exact=False, geodsolve=False, name=NN):
407
+ def equidistant(lat0, lon0, datum=_WGS84, exact=False, geodsolve=False, **name):
409
408
  '''Return an L{EquidistantExact}, L{EquidistantGeodSolve} or (if I{Karney}'s
410
409
  U{geographiclib<https://PyPI.org/project/geographiclib>} package is
411
410
  installed) an L{EquidistantKarney}, otherwise an L{Equidistant} instance.
@@ -417,7 +416,7 @@ def equidistant(lat0, lon0, datum=_WGS84, exact=False, geodsolve=False, name=NN)
417
416
  radius (C{meter}).
418
417
  @kwarg exact: Return an L{EquidistantExact} instance.
419
418
  @kwarg geodsolve: Return an L{EquidistantGeodSolve} instance.
420
- @kwarg name: Optional name for the projection (C{str}).
419
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
421
420
 
422
421
  @return: An L{EquidistantExact}, L{EquidistantGeodSolve},
423
422
  L{EquidistantKarney} or L{Equidistant} instance.
@@ -433,10 +432,10 @@ def equidistant(lat0, lon0, datum=_WGS84, exact=False, geodsolve=False, name=NN)
433
432
  E = EquidistantExact if exact else (EquidistantGeodSolve if geodsolve else Equidistant)
434
433
  if E is Equidistant:
435
434
  try:
436
- return EquidistantKarney(lat0, lon0, datum=datum, name=name) # PYCHOK types
435
+ return EquidistantKarney(lat0, lon0, datum=datum, **name) # PYCHOK types
437
436
  except ImportError:
438
437
  pass
439
- return E(lat0, lon0, datum=datum, name=name) # PYCHOK types
438
+ return E(lat0, lon0, datum=datum, **name) # PYCHOK types
440
439
 
441
440
 
442
441
  class _AzimuthalGeodesic(_AzimuthalBase):
@@ -452,36 +451,37 @@ class _AzimuthalGeodesic(_AzimuthalBase):
452
451
  '''I{Must be overloaded}.'''
453
452
  self._notOverloaded()
454
453
 
455
- def _7Tuple(self, e, n, r, M=None, name=NN):
454
+ def _7Tuple(self, e, n, r, name_LatLon_kwds, M=None):
456
455
  '''(INTERNAL) Return an C{Azimuthal7Tuple}.
457
456
  '''
458
- s = M if M is not None else ( # reciprocal, azimuthal scale
459
- (r.m12 / r.s12) if r.a12 > _EPS_K else _1_0)
457
+ s = M
458
+ if s is None: # reciprocal, azimuthal scale
459
+ s = (r.m12 / r.s12) if r.a12 > _EPS_K else _1_0
460
460
  z = _umod_360(r.azi2) # -180 <= r.azi2 < 180 ... 0 <= z < 360
461
- return Azimuthal7Tuple(e, n, r.lat2, r.lon2, z, s, self.datum,
462
- name=name or self.name)
461
+ t, _ = _name2__(name_LatLon_kwds, _or_nameof=self)
462
+ return Azimuthal7Tuple(e, n, r.lat2, r.lon2, z, s, self.datum, name=t)
463
463
 
464
464
 
465
465
  class _EquidistantBase(_AzimuthalGeodesic):
466
466
  '''(INTERNAL) Base for classes L{EquidistantExact}, L{EquidistantGeodSolve}
467
467
  and L{EquidistantKarney}.
468
468
  '''
469
- def __init__(self, lat0, lon0, datum=_WGS84, name=NN):
469
+ def __init__(self, lat0, lon0, datum=_WGS84, **name):
470
470
  '''New azimuthal L{EquidistantExact}, L{EquidistantGeodSolve} or
471
471
  L{EquidistantKarney} projection.
472
472
  '''
473
- _AzimuthalGeodesic.__init__(self, lat0, lon0, datum=datum, name=name)
473
+ _AzimuthalGeodesic.__init__(self, lat0, lon0, datum=datum, **name)
474
474
 
475
475
  g = self.geodesic
476
476
  # g.STANDARD = g.AZIMUTH | g.DISTANCE | g.LATITUDE | g.LONGITUDE
477
477
  self._mask = g.REDUCEDLENGTH | g.STANDARD # | g.LONG_UNROLL
478
478
 
479
- def forward(self, lat, lon, name=NN):
479
+ def forward(self, lat, lon, **name):
480
480
  '''Convert an (ellipsoidal) geodetic location to azimuthal equidistant east- and northing.
481
481
 
482
482
  @arg lat: Latitude of the location (C{degrees90}).
483
483
  @arg lon: Longitude of the location (C{degrees180}).
484
- @kwarg name: Optional name for the location (C{str}).
484
+ @kwarg name: Optional C{B{name}=NN} for the location (C{str}).
485
485
 
486
486
  @return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}
487
487
  with easting C{x} and northing C{y} of point in C{meter} and C{lat}
@@ -497,17 +497,17 @@ class _EquidistantBase(_AzimuthalGeodesic):
497
497
  r = self.geodesic.Inverse(self.lat0, self.lon0,
498
498
  Lat_(lat), Lon_(lon), outmask=self._mask)
499
499
  x, y = sincos2d(r.azi1)
500
- return self._7Tuple(x * r.s12, y * r.s12, r, name=name)
500
+ return self._7Tuple(x * r.s12, y * r.s12, r, _name__(name))
501
501
 
502
- def reverse(self, x, y, name=NN, LatLon=None, **LatLon_kwds): # PYCHOK signature
502
+ def reverse(self, x, y, LatLon=None, **name_LatLon_kwds): # PYCHOK signature
503
503
  '''Convert an azimuthal equidistant location to (ellipsoidal) geodetic lat- and longitude.
504
504
 
505
505
  @arg x: Easting of the location (C{meter}).
506
506
  @arg y: Northing of the location (C{meter}).
507
- @kwarg name: Optional name for the location (C{str}).
508
507
  @kwarg LatLon: Class to use (C{LatLon}) or C{None}.
509
- @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword
510
- arguments, ignored if C{B{LatLon} is None}.
508
+ @kwarg name_LatLon_kwds: Optional C{B{name}=NN} for the location and
509
+ optional, additional B{C{LatLon}} keyword arguments,
510
+ ignored if C{B{LatLon} is None}.
511
511
 
512
512
  @return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an
513
513
  L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@@ -521,8 +521,8 @@ class _EquidistantBase(_AzimuthalGeodesic):
521
521
  e, n, z, s = _enzh4(x, y)
522
522
 
523
523
  r = self.geodesic.Direct(self.lat0, self.lon0, z, s, outmask=self._mask)
524
- return self._7Tuple(e, n, r, name=name) if LatLon is None else \
525
- self._toLatLon(r.lat2, r.lon2, LatLon, LatLon_kwds, name)
524
+ return self._7Tuple(e, n, r, name_LatLon_kwds) if LatLon is None else \
525
+ self._toLatLon(r.lat2, r.lon2, LatLon, name_LatLon_kwds)
526
526
 
527
527
 
528
528
  class EquidistantExact(_EquidistantBase):
@@ -540,7 +540,7 @@ class EquidistantExact(_EquidistantBase):
540
540
  of the projection, serve to specify completely the local affine transformation between
541
541
  geographic and projected coordinates.
542
542
  '''
543
- def __init__(self, lat0, lon0, datum=_WGS84, name=NN):
543
+ def __init__(self, lat0, lon0, datum=_WGS84, **name):
544
544
  '''New azimuthal L{EquidistantExact} projection.
545
545
 
546
546
  @arg lat0: Latitude of center point (C{degrees90}).
@@ -548,11 +548,11 @@ class EquidistantExact(_EquidistantBase):
548
548
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
549
549
  L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth
550
550
  radius (C{meter}).
551
- @kwarg name: Optional name for the projection (C{str}).
551
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
552
552
 
553
553
  @raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}} or B{C{datum}}.
554
554
  '''
555
- _EquidistantBase.__init__(self, lat0, lon0, datum=datum, name=name)
555
+ _EquidistantBase.__init__(self, lat0, lon0, datum=datum, **name)
556
556
 
557
557
  if _FOR_DOCS:
558
558
  forward = _EquidistantBase.forward
@@ -573,7 +573,7 @@ class EquidistantGeodSolve(_EquidistantBase):
573
573
 
574
574
  @see: L{EquidistantExact} and module L{geodsolve}.
575
575
  '''
576
- def __init__(self, lat0, lon0, datum=_WGS84, name=NN):
576
+ def __init__(self, lat0, lon0, datum=_WGS84, **name):
577
577
  '''New azimuthal L{EquidistantGeodSolve} projection.
578
578
 
579
579
  @arg lat0: Latitude of center point (C{degrees90}).
@@ -581,11 +581,11 @@ class EquidistantGeodSolve(_EquidistantBase):
581
581
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
582
582
  L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth
583
583
  radius (C{meter}).
584
- @kwarg name: Optional name for the projection (C{str}).
584
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
585
585
 
586
586
  @raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}} or B{C{datum}}.
587
587
  '''
588
- _EquidistantBase.__init__(self, lat0, lon0, datum=datum, name=name)
588
+ _EquidistantBase.__init__(self, lat0, lon0, datum=datum, **name)
589
589
 
590
590
  if _FOR_DOCS:
591
591
  forward = _EquidistantBase.forward
@@ -605,7 +605,7 @@ class EquidistantKarney(_EquidistantBase):
605
605
 
606
606
  @see: L{EquidistantExact}.
607
607
  '''
608
- def __init__(self, lat0, lon0, datum=_WGS84, name=NN):
608
+ def __init__(self, lat0, lon0, datum=_WGS84, **name):
609
609
  '''New azimuthal L{EquidistantKarney} projection.
610
610
 
611
611
  @arg lat0: Latitude of center point (C{degrees90}).
@@ -613,14 +613,14 @@ class EquidistantKarney(_EquidistantBase):
613
613
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
614
614
  L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth
615
615
  radius (C{meter}).
616
- @kwarg name: Optional name for the projection (C{str}).
616
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
617
617
 
618
618
  @raise ImportError: Package U{geographiclib<https://PyPI.org/project/geographiclib>}
619
619
  not installed or not found.
620
620
 
621
621
  @raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}} or B{C{datum}}.
622
622
  '''
623
- _EquidistantBase.__init__(self, lat0, lon0, datum=datum, name=name)
623
+ _EquidistantBase.__init__(self, lat0, lon0, datum=datum, **name)
624
624
 
625
625
  if _FOR_DOCS:
626
626
  forward = _EquidistantBase.forward
@@ -648,12 +648,12 @@ class Gnomonic(_AzimuthalBase):
648
648
  if _FOR_DOCS:
649
649
  __init__ = _AzimuthalBase.__init__
650
650
 
651
- def forward(self, lat, lon, name=NN):
651
+ def forward(self, lat, lon, **name):
652
652
  '''Convert a geodetic location to azimuthal equidistant east- and northing.
653
653
 
654
654
  @arg lat: Latitude of the location (C{degrees90}).
655
655
  @arg lon: Longitude of the location (C{degrees180}).
656
- @kwarg name: Optional name for the location (C{str}).
656
+ @kwarg name: Optional C{B{name}=NN} for the location (C{str}).
657
657
 
658
658
  @return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}
659
659
  with easting C{x} and northing C{y} of point in C{meter} and C{lat}
@@ -670,15 +670,15 @@ class Gnomonic(_AzimuthalBase):
670
670
 
671
671
  return self._forward(lat, lon, name, _k_t)
672
672
 
673
- def reverse(self, x, y, name=NN, **LatLon_and_kwds):
673
+ def reverse(self, x, y, LatLon=None, **name_LatLon_kwds):
674
674
  '''Convert an azimuthal equidistant location to geodetic lat- and longitude.
675
675
 
676
676
  @arg x: Easting of the location (C{meter}).
677
677
  @arg y: Northing of the location (C{meter}).
678
- @kwarg name: Optional name for the location (C{str}).
679
- @kwarg LatLon_and_kwds: Optional, C{B{LatLon}=None} class to use and
680
- additional B{C{LatLon}} keyword arguments,
681
- ignored if C{B{LatLon} is None} or not given.
678
+ @kwarg LatLon: Class to use (C{LatLon}) or C{None}.
679
+ @kwarg name_LatLon_kwds: Optional C{B{name}=NN} for the location and
680
+ optional, additional B{C{LatLon}} keyword arguments,
681
+ ignored if C{B{LatLon} is None}.
682
682
 
683
683
  @return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an
684
684
  L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@@ -692,10 +692,10 @@ class Gnomonic(_AzimuthalBase):
692
692
  def _c(c):
693
693
  return atan1(c) if c > EPS else None
694
694
 
695
- return self._reverse(x, y, name, _c, False, **LatLon_and_kwds)
695
+ return self._reverse(x, y, _c, False, LatLon, **name_LatLon_kwds)
696
696
 
697
697
 
698
- def gnomonic(lat0, lon0, datum=_WGS84, exact=False, geodsolve=False, name=NN):
698
+ def gnomonic(lat0, lon0, datum=_WGS84, exact=False, geodsolve=False, **name):
699
699
  '''Return a L{GnomonicExact} or (if I{Karney}'s U{geographiclib
700
700
  <https://PyPI.org/project/geographiclib>} package is installed)
701
701
  a L{GnomonicKarney}, otherwise a L{Gnomonic} instance.
@@ -707,7 +707,7 @@ def gnomonic(lat0, lon0, datum=_WGS84, exact=False, geodsolve=False, name=NN):
707
707
  radius (C{meter}).
708
708
  @kwarg exact: Return a L{GnomonicExact} instance.
709
709
  @kwarg geodsolve: Return a L{GnomonicGeodSolve} instance.
710
- @kwarg name: Optional name for the projection (C{str}).
710
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
711
711
 
712
712
  @return: A L{GnomonicExact}, L{GnomonicGeodSolve},
713
713
  L{GnomonicKarney} or L{Gnomonic} instance.
@@ -723,33 +723,33 @@ def gnomonic(lat0, lon0, datum=_WGS84, exact=False, geodsolve=False, name=NN):
723
723
  G = GnomonicExact if exact else (GnomonicGeodSolve if geodsolve else Gnomonic)
724
724
  if G is Gnomonic:
725
725
  try:
726
- return GnomonicKarney(lat0, lon0, datum=datum, name=name) # PYCHOK types
726
+ return GnomonicKarney(lat0, lon0, datum=datum, **name) # PYCHOK types
727
727
  except ImportError:
728
728
  pass
729
- return G(lat0, lon0, datum=datum, name=name) # PYCHOK types
729
+ return G(lat0, lon0, datum=datum, **name) # PYCHOK types
730
730
 
731
731
 
732
732
  class _GnomonicBase(_AzimuthalGeodesic):
733
733
  '''(INTERNAL) Base for classes L{GnomonicExact}, L{GnomonicGeodSolve}
734
734
  and L{GnomonicKarney}.
735
735
  '''
736
- def __init__(self, lat0, lon0, datum=_WGS84, name=NN):
736
+ def __init__(self, lat0, lon0, datum=_WGS84, **name):
737
737
  '''New azimuthal L{GnomonicExact} or L{GnomonicKarney} projection.
738
738
  '''
739
- _AzimuthalGeodesic.__init__(self, lat0, lon0, datum=datum, name=name)
739
+ _AzimuthalGeodesic.__init__(self, lat0, lon0, datum=datum, **name)
740
740
 
741
741
  g = self.geodesic
742
742
  self._mask = g.ALL # | g.LONG_UNROLL
743
743
 
744
- def forward(self, lat, lon, name=NN, raiser=True): # PYCHOK signature
744
+ def forward(self, lat, lon, raiser=True, **name): # PYCHOK signature
745
745
  '''Convert an (ellipsoidal) geodetic location to azimuthal gnomonic east-
746
746
  and northing.
747
747
 
748
748
  @arg lat: Latitude of the location (C{degrees90}).
749
749
  @arg lon: Longitude of the location (C{degrees180}).
750
- @kwarg name: Optional name for the location (C{str}).
751
750
  @kwarg raiser: Do or don't throw an error (C{bool}) if
752
751
  the location lies over the horizon.
752
+ @kwarg name: Optional C{B{name}=NN} for the location (C{str}).
753
753
 
754
754
  @return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}
755
755
  with easting C{x} and northing C{y} in C{meter} and C{lat} and
@@ -777,19 +777,19 @@ class _GnomonicBase(_AzimuthalGeodesic):
777
777
  else: # PYCHOK no cover
778
778
  e = n = NAN
779
779
 
780
- t = self._7Tuple(e, n, r, M=M, name=name)
780
+ t = self._7Tuple(e, n, r, _name__(name), M=M)
781
781
  t._iteraton = 0
782
782
  return t
783
783
 
784
- def reverse(self, x, y, name=NN, LatLon=None, **LatLon_kwds): # PYCHOK signature
784
+ def reverse(self, x, y, LatLon=None, **name_LatLon_kwds): # PYCHOK signature
785
785
  '''Convert an azimuthal gnomonic location to (ellipsoidal) geodetic lat- and longitude.
786
786
 
787
787
  @arg x: Easting of the location (C{meter}).
788
788
  @arg y: Northing of the location (C{meter}).
789
- @kwarg name: Optional name for the location (C{str}).
790
789
  @kwarg LatLon: Class to use (C{LatLon}) or C{None}.
791
- @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword
792
- arguments, ignored if C{B{LatLon} is None}.
790
+ @kwarg name_LatLon_kwds: Optional C{B{name}=NN} for the location and
791
+ optional, additional B{C{LatLon}} keyword arguments,
792
+ ignored if C{B{LatLon} is None}.
793
793
 
794
794
  @return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an
795
795
  L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@@ -832,8 +832,8 @@ class _GnomonicBase(_AzimuthalGeodesic):
832
832
  raise AzimuthalError(Fmt.no_convergence(d, a),
833
833
  txt=unstr(self.reverse, x, y))
834
834
 
835
- t = self._7Tuple(e, n, r, M=r.M12, name=name) if LatLon is None else \
836
- self._toLatLon(r.lat2, r.lon2, LatLon, LatLon_kwds, name)
835
+ t = self._7Tuple(e, n, r, name_LatLon_kwds, M=r.M12) if LatLon is None else \
836
+ self._toLatLon(r.lat2, r.lon2, LatLon, name_LatLon_kwds)
837
837
  t._iteration = self._iteration = i
838
838
  return t
839
839
 
@@ -846,7 +846,7 @@ class GnomonicExact(_GnomonicBase):
846
846
  @see: I{Karney}'s U{Detailed Description<https://GeographicLib.SourceForge.io/C++/doc/
847
847
  classGeographicLib_1_1Gnomonic.html>}, especially the B{Warning}.
848
848
  '''
849
- def __init__(self, lat0, lon0, datum=_WGS84, name=NN):
849
+ def __init__(self, lat0, lon0, datum=_WGS84, **name):
850
850
  '''New azimuthal L{GnomonicExact} projection.
851
851
 
852
852
  @arg lat0: Latitude of center point (C{degrees90}).
@@ -854,11 +854,11 @@ class GnomonicExact(_GnomonicBase):
854
854
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
855
855
  L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth
856
856
  radius (C{meter}).
857
- @kwarg name: Optional name for the projection (C{str}).
857
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
858
858
 
859
859
  @raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}}.
860
860
  '''
861
- _GnomonicBase.__init__(self, lat0, lon0, datum=datum, name=name)
861
+ _GnomonicBase.__init__(self, lat0, lon0, datum=datum, **name)
862
862
 
863
863
  if _FOR_DOCS:
864
864
  forward = _GnomonicBase.forward
@@ -879,7 +879,7 @@ class GnomonicGeodSolve(_GnomonicBase):
879
879
 
880
880
  @see: L{GnomonicExact} and module L{geodsolve}.
881
881
  '''
882
- def __init__(self, lat0, lon0, datum=_WGS84, name=NN):
882
+ def __init__(self, lat0, lon0, datum=_WGS84, **name):
883
883
  '''New azimuthal L{GnomonicGeodSolve} projection.
884
884
 
885
885
  @arg lat0: Latitude of center point (C{degrees90}).
@@ -887,11 +887,11 @@ class GnomonicGeodSolve(_GnomonicBase):
887
887
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
888
888
  L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth
889
889
  radius (C{meter}).
890
- @kwarg name: Optional name for the projection (C{str}).
890
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
891
891
 
892
892
  @raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}}.
893
893
  '''
894
- _GnomonicBase.__init__(self, lat0, lon0, datum=datum, name=name)
894
+ _GnomonicBase.__init__(self, lat0, lon0, datum=datum, **name)
895
895
 
896
896
  if _FOR_DOCS:
897
897
  forward = _GnomonicBase.forward
@@ -911,7 +911,7 @@ class GnomonicKarney(_GnomonicBase):
911
911
 
912
912
  @see: L{GnomonicExact}.
913
913
  '''
914
- def __init__(self, lat0, lon0, datum=_WGS84, name=NN):
914
+ def __init__(self, lat0, lon0, datum=_WGS84, **name):
915
915
  '''New azimuthal L{GnomonicKarney} projection.
916
916
 
917
917
  @arg lat0: Latitude of center point (C{degrees90}).
@@ -919,14 +919,14 @@ class GnomonicKarney(_GnomonicBase):
919
919
  @kwarg datum: Optional datum or ellipsoid (L{Datum}, L{Ellipsoid},
920
920
  L{Ellipsoid2} or L{a_f2Tuple}) or I{scalar} earth
921
921
  radius (C{meter}).
922
- @kwarg name: Optional name for the projection (C{str}).
922
+ @kwarg name: Optional C{B{name}=NN} for the projection (C{str}).
923
923
 
924
924
  @raise ImportError: Package U{geographiclib<https://PyPI.org/project/geographiclib>}
925
925
  not installed or not found.
926
926
 
927
927
  @raise AzimuthalError: Invalid B{C{lat0}} or B{C{lon0}}.
928
928
  '''
929
- _GnomonicBase.__init__(self, lat0, lon0, datum=datum, name=name)
929
+ _GnomonicBase.__init__(self, lat0, lon0, datum=datum, **name)
930
930
 
931
931
  if _FOR_DOCS:
932
932
  forward = _GnomonicBase.forward
@@ -951,12 +951,12 @@ class LambertEqualArea(_AzimuthalBase):
951
951
  if _FOR_DOCS:
952
952
  __init__ = _AzimuthalBase.__init__
953
953
 
954
- def forward(self, lat, lon, name=NN):
954
+ def forward(self, lat, lon, **name):
955
955
  '''Convert a geodetic location to azimuthal Lambert-equal-area east- and northing.
956
956
 
957
957
  @arg lat: Latitude of the location (C{degrees90}).
958
958
  @arg lon: Longitude of the location (C{degrees180}).
959
- @kwarg name: Optional name for the location (C{str}).
959
+ @kwarg name: Optional C{B{name}=NN} for the location (C{str}).
960
960
 
961
961
  @return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}
962
962
  with easting C{x} and northing C{y} of point in C{meter} and C{lat}
@@ -974,15 +974,15 @@ class LambertEqualArea(_AzimuthalBase):
974
974
 
975
975
  return self._forward(lat, lon, name, _k_t)
976
976
 
977
- def reverse(self, x, y, name=NN, **LatLon_and_kwds):
977
+ def reverse(self, x, y, LatLon=None, **name_LatLon_kwds):
978
978
  '''Convert an azimuthal Lambert-equal-area location to geodetic lat- and longitude.
979
979
 
980
980
  @arg x: Easting of the location (C{meter}).
981
981
  @arg y: Northing of the location (C{meter}).
982
- @kwarg name: Optional name for the location (C{str}).
983
- @kwarg LatLon_and_kwds: Optional, C{B{LatLon}=None} class to use and
984
- additional B{C{LatLon}} keyword arguments,
985
- ignored if C{B{LatLon} is None} or not given.
982
+ @kwarg LatLon: Class to use (C{LatLon}) or C{None}.
983
+ @kwarg name_LatLon_kwds: Optional C{B{name}=NN} for the location
984
+ and optional, additional B{C{LatLon}} keyword
985
+ arguments, ignored if C{B{LatLon} is None}.
986
986
 
987
987
  @return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an
988
988
  L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@@ -997,7 +997,7 @@ class LambertEqualArea(_AzimuthalBase):
997
997
  c *= _0_5
998
998
  return (asin1(c) * _2_0) if c > EPS else None
999
999
 
1000
- return self._reverse(x, y, name, _c, True, **LatLon_and_kwds)
1000
+ return self._reverse(x, y, _c, True, LatLon, **name_LatLon_kwds)
1001
1001
 
1002
1002
 
1003
1003
  class Orthographic(_AzimuthalBase):
@@ -1008,12 +1008,12 @@ class Orthographic(_AzimuthalBase):
1008
1008
  if _FOR_DOCS:
1009
1009
  __init__ = _AzimuthalBase.__init__
1010
1010
 
1011
- def forward(self, lat, lon, name=NN):
1011
+ def forward(self, lat, lon, **name):
1012
1012
  '''Convert a geodetic location to azimuthal orthographic east- and northing.
1013
1013
 
1014
1014
  @arg lat: Latitude of the location (C{degrees90}).
1015
1015
  @arg lon: Longitude of the location (C{degrees180}).
1016
- @kwarg name: Optional name for the location (C{str}).
1016
+ @kwarg name: Optional C{B{name}=NN} for the location (C{str}).
1017
1017
 
1018
1018
  @return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}
1019
1019
  with easting C{x} and northing C{y} of point in C{meter} and C{lat}
@@ -1028,15 +1028,15 @@ class Orthographic(_AzimuthalBase):
1028
1028
 
1029
1029
  return self._forward(lat, lon, name, _k_t)
1030
1030
 
1031
- def reverse(self, x, y, name=NN, **LatLon_and_kwds):
1031
+ def reverse(self, x, y, LatLon=None, **name_LatLon_kwds):
1032
1032
  '''Convert an azimuthal orthographic location to geodetic lat- and longitude.
1033
1033
 
1034
1034
  @arg x: Easting of the location (C{meter}).
1035
1035
  @arg y: Northing of the location (C{meter}).
1036
- @kwarg name: Optional name for the location (C{str}).
1037
- @kwarg LatLon_and_kwds: Optional, C{B{LatLon}=None} class to use and
1038
- additional B{C{LatLon}} keyword arguments,
1039
- ignored if C{B{LatLon} is None} or not given.
1036
+ @kwarg LatLon: Class to use (C{LatLon}) or C{None}.
1037
+ @kwarg name_LatLon_kwds: Optional C{B{name}=NN} for the location and
1038
+ optional, additional B{C{LatLon}} keyword arguments,
1039
+ ignored if C{B{LatLon} is None}.
1040
1040
 
1041
1041
  @return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an
1042
1042
  L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
@@ -1050,7 +1050,7 @@ class Orthographic(_AzimuthalBase):
1050
1050
  def _c(c):
1051
1051
  return asin1(c) if c > EPS else None
1052
1052
 
1053
- return self._reverse(x, y, name, _c, False, **LatLon_and_kwds)
1053
+ return self._reverse(x, y, _c, False, LatLon, **name_LatLon_kwds)
1054
1054
 
1055
1055
 
1056
1056
  class Stereographic(_AzimuthalBase):
@@ -1064,12 +1064,12 @@ class Stereographic(_AzimuthalBase):
1064
1064
  if _FOR_DOCS:
1065
1065
  __init__ = _AzimuthalBase.__init__
1066
1066
 
1067
- def forward(self, lat, lon, name=NN):
1067
+ def forward(self, lat, lon, **name):
1068
1068
  '''Convert a geodetic location to azimuthal stereographic east- and northing.
1069
1069
 
1070
1070
  @arg lat: Latitude of the location (C{degrees90}).
1071
1071
  @arg lon: Longitude of the location (C{degrees180}).
1072
- @kwarg name: Optional name for the location (C{str}).
1072
+ @kwarg name: Optional C{B{name}=NN} for the location (C{str}).
1073
1073
 
1074
1074
  @return: An L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}
1075
1075
  with easting C{x} and northing C{y} of point in C{meter} and C{lat}
@@ -1097,33 +1097,32 @@ class Stereographic(_AzimuthalBase):
1097
1097
  def k0(self, factor):
1098
1098
  '''Set the central scale factor (C{scalar}).
1099
1099
  '''
1100
- n = Stereographic.k0.fget.__name__
1100
+ n = Stereographic.k0.fget.__name__ # 'k0', name__=Stereographic.k0.fget
1101
1101
  self._k0 = Scalar_(factor, name=n, low=EPS, high=2) # XXX high=1, 2, other?
1102
1102
  self._k02 = self._k0 * _2_0
1103
1103
 
1104
- def reverse(self, x, y, name=NN, **LatLon_and_kwds):
1104
+ def reverse(self, x, y, LatLon=None, **name_LatLon_kwds):
1105
1105
  '''Convert an azimuthal stereographic location to geodetic lat- and longitude.
1106
1106
 
1107
1107
  @arg x: Easting of the location (C{meter}).
1108
1108
  @arg y: Northing of the location (C{meter}).
1109
- @kwarg name: Optional name for the location (C{str}).
1110
- @kwarg LatLon_and_kwds: Optional, C{B{LatLon}=None} class to use and
1111
- additional B{C{LatLon}} keyword arguments,
1112
- ignored if C{B{LatLon} is None} or not given.
1109
+ @kwarg LatLon: Class to use (C{LatLon}) or C{None}.
1110
+ @kwarg name_LatLon_kwds: Optional C{B{name}=NN} for the location and
1111
+ optional, additional B{C{LatLon}} keyword arguments,
1112
+ ignored if C{B{LatLon} is None}.
1113
1113
 
1114
1114
  @return: The geodetic (C{LatLon}) or if B{C{LatLon}} is C{None} an
1115
1115
  L{Azimuthal7Tuple}C{(x, y, lat, lon, azimuth, scale, datum)}.
1116
1116
 
1117
- @note: The C{lat} will be in the range C{[-90..90] degrees} and C{lon}
1118
- in the range C{[-180..180] degrees}. The C{scale} of the
1119
- projection is C{1} in I{radial} direction, C{azimuth} clockwise
1120
- from true North and is C{1 / reciprocal} in the direction
1121
- perpendicular to this.
1117
+ @note: The C{lat} will be in range C{[-90..90] degrees}, C{lon} in range
1118
+ C{[-180..180] degrees} and C{azimuth} clockwise from true North.
1119
+ The C{scale} of the projection is C{1} in I{radial} direction and
1120
+ is C{1 / reciprocal} in the direction perpendicular to this.
1122
1121
  '''
1123
1122
  def _c(c):
1124
1123
  return (atan2(c, self._k02) * _2_0) if c > EPS else None
1125
1124
 
1126
- return self._reverse(x, y, name, _c, False, **LatLon_and_kwds)
1125
+ return self._reverse(x, y, _c, False, LatLon, **name_LatLon_kwds)
1127
1126
 
1128
1127
 
1129
1128
  __all__ += _ALL_DOCS(_AzimuthalBase, _AzimuthalGeodesic, _EquidistantBase, _GnomonicBase)