Coverage for pygeodesy/lcc.py : 98%

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{Conic}, L{Conics} registry, L{LCCError} and position class L{Lcc}.
See U{LCC<https://WikiPedia.org/wiki/Lambert_conformal_conic_projection>}, U{Lambert Conformal Conic to Geographic Transformation Formulae <https://www.Linz.govt.NZ/data/geodetic-system/coordinate-conversion/ projection-conversions/lambert-conformal-conic-geographic>}, U{Lambert Conformal Conic Projection <https://MathWorld.Wolfram.com/LambertConformalConicProjection.html>} and John P. Snyder U{'Map Projections - A Working Manual' <https://pubs.er.USGS.gov/djvu/PP/PP_1395.pdf>}, 1987, pp 107-109.
@newfield example: Example, Examples '''
_xsubclassof, _xzipairs _ellipsoidal_, _float as _F, _k0_, \ _lat0_, _lon0_, _m_, _SPACE_, \ _SQUARE_, _0_0, _0_5, _1_0 nameof, _xnamed LatLonDatum3Tuple, _LatLon4Tuple, \ PhiLam2Tuple
'''Lambert conformal conic projection (1- or 2-SP). '''
k0=1, opt3=0, name=NN, auth=NN): '''New Lambert conformal conic projection.
@arg latlon0: Origin with (ellipsoidal) datum (C{LatLon}). @arg par1: First standard parallel (C{degrees90}). @kwarg par2: Optional, second standard parallel (C{degrees90}). @kwarg E0: Optional, false easting (C{meter}). @kwarg N0: Optional, false northing (C{meter}). @kwarg k0: Optional scale factor (C{scalar}). @kwarg opt3: Optional meridian (C{degrees180}). @kwarg name: Optional name of the conic (C{str}). @kwarg auth: Optional authentication authority (C{str}).
@return: A Lambert projection (L{Conic}).
@raise TypeError: Non-ellipsoidal B{C{latlon0}}.
@raise ValueError: Invalid B{C{par1}}, B{C{par2}}, B{C{E0}}, B{C{N0}}, B{C{k0}} or B{C{opt3}}.
@example:
>>> from pygeodesy import Conic, Datums, ellipsoidalNvector >>> ll0 = ellipsoidalNvector.LatLon(23, -96, datum=Datums.NAD27) >>> Snyder = Conic(ll0, 33, 45, E0=0, N0=0, name='Snyder') '''
self._k0 = Scalar_(k0=k0) self._opt3 = Lam_(opt3=opt3)
'''Get the authentication authority (C{str}). '''
'''Get the datum (L{Datum}). '''
'''Get the false easting (C{meter}). '''
'''Get scale factor (C{float}). '''
'''Get the origin latitude (C{degrees90}). '''
'''Get the central origin (L{LatLon2Tuple}C{(lat, lon)}). '''
'''Get the central meridian (C{radians}). '''
'''Get the central meridian (C{degrees180}). '''
'''Get the false northing (C{meter}). '''
'''Get the conic and datum names as "conic.datum" (C{str}). '''
'''Get the optional meridian (C{degrees180}). '''
'''Get the 1st standard parallel (C{degrees90}). '''
'''Get the 2nd standard parallel (C{degrees90}). '''
'''Get the origin latitude (C{radians}). '''
'''Get the central origin (L{PhiLam2Tuple}C{(phi, lam)}). '''
'''Get the number of standard parallels (C{int}). '''
'''Convert this conic to the given datum.
@arg datum: Ellipsoidal datum to use (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}).
@return: Converted conic, unregistered (L{Conic}).
@raise TypeError: Non-ellipsoidal B{C{datum}}. ''' raise _IsnotError(_ellipsoidal_, datum=datum)
else: / (log(t1) - log(t2))
'''Return this conic as a string.
@kwarg prec: Optional number of decimals, unstripped (C{int}).
@return: Conic attributes (C{str}). ''' _E0_, _N0_, _k0_, _SP_, datum=self.datum) else: _E0_, _N0_, _k0_, _SP_, datum=self.datum)
'''(INTERNAL) Copy this conic to c. @arg c: Duplicate (L{Conic}). '''
'''(INTERNAL) Compute m(a). '''
'''(INTERNAL) Compute p(a). '''
'''(INTERNAL) Compute r(t). '''
'''(INTERNAL) Compute t(lat). '''
'''(INTERNAL) Compute x(t_x). '''
# AsLb = Conic(_LLEB(-14.2666667, 170, datum=Datums.NAD27), _0_0, _0_0, # E0=_F(500000), N0=_0_0, name='AsLb', auth='EPSG:2155'), # American Samoa ... SP=1 ! Be08Lb = Conic(_LLEB(50.7978150, 4.359215833, datum=Datums.GRS80), _F(49.833333), _F(51.166667), E0=_F(649328.0), N0=_F(665262.0), name='Be08Lb', auth='EPSG:9802'), # Belgium Be72Lb = Conic(_LLEB(90, 4.3674867, datum=Datums.NAD83), _F(49.8333339), _F(51.1666672), E0=_F(150000.013), N0=_F(5400088.438), name='Be72Lb', auth='EPSG:31370'), # Belgium Fr93Lb = Conic(_LLEB(46.5, 3, datum=Datums.WGS84), _F(49), _F(44), E0=_F(700000), N0=_F(6600000), name='Fr93Lb', auth='EPSG:2154'), # RFG93, France MaNLb = Conic(_LLEB(33.3, -5.4, datum=Datums.NTF), _F(31.73), _F(34.87), E0=_F(500000), N0=_F(300000), name='MaNLb'), # Marocco MxLb = Conic(_LLEB(12, -102, datum=Datums.WGS84), _F(17.5), _F(29.5), E0=_F(2500000), N0=_0_0, name='MxLb', auth='EPSG:2155'), # Mexico PyT_Lb = Conic(_LLEB(46.8, 2.33722917, datum=Datums.NTF), _F(45.89893890000052), _F(47.69601440000037), E0=_F(600000), N0=_F(200000), name='PyT_Lb', auth='Test'), # France? USA_Lb = Conic(_LLEB(23, -96, datum=Datums.WGS84), _F(33), _F(45), E0=_0_0, N0=_0_0, name='USA_Lb'), # Conterminous, contiguous USA? WRF_Lb = Conic(_LLEB(40, -97, datum=Datums.WGS84), _F(33), _F(45), E0=_0_0, N0=_0_0, name='WRF_Lb', auth='EPSG:4326') # World )
'''Lambert Conformal Conic C{LCC} or other L{Lcc} issue. '''
'''Lambert conformal conic East-/Northing location. '''
'''New L{Lcc} Lamber conformal conic position.
@arg e: Easting (C{meter}). @arg n: Northing (C{meter}). @kwarg h: Optional height (C{meter}). @kwarg conic: Optional, the conic projection (L{Conic}). @kwarg name: Optional name (C{str}).
@return: The Lambert location (L{Lcc}).
@raise LCCError: Invalid B{C{h}} or invalid or negative B{C{e}} or B{C{n}}.
@raise TypeError: If B{C{conic}} is not L{Conic}.
@example:
>>> lb = Lcc(448251, 5411932.0001) ''' self._height = Height(h=h, Error=LCCError)
'''Get the conic projection (L{Conic}). '''
'''Get the easting (C{meter}). '''
'''Get the height (C{meter}). '''
'''Get the lat- and longitude in C{degrees} (L{LatLon2Tuple}). '''
'''Get the northing (C{meter}). '''
'''Get the lat- and longitude in C{radians} (L{PhiLam2Tuple}). ''' radians(self.latlon.lon))
def to3lld(self, datum=None): # PYCHOK no cover '''DEPRECATED, use method C{toLatLon}.
@kwarg datum: Optional datum to use, otherwise use this B{C{Lcc}}'s conic.datum (C{Datum}).
@return: A L{LatLonDatum3Tuple}C{(lat, lon, datum)}.
@raise TypeError: If B{C{datum}} is not ellipsoidal. ''' if datum in (None, self.conic.datum): r = LatLonDatum3Tuple(self.latlon.lat, self.latlon.lon, self.conic.datum) else: r = self.toLatLon(LatLon=None, datum=datum) r = LatLonDatum3Tuple(r.lat, r.lon, r.datum) return self._xnamed(r)
'''Convert this L{Lcc} to an (ellipsoidal) geodetic point.
@kwarg LatLon: Optional, ellipsoidal class to return the geodetic point (C{LatLon}) or C{None}. @kwarg datum: Optional datum to use, otherwise use this B{C{Lcc}}'s conic.datum (L{Datum}, L{Ellipsoid}, L{Ellipsoid2} or L{a_f2Tuple}). @kwarg height: Optional height for the point, overriding the default height (C{meter}). @kwarg LatLon_kwds: Optional, additional B{C{LatLon}} keyword arguments, unused if C{B{LatLon}=None}.
@return: The point (B{C{LatLon}}) or a L{LatLon4Tuple}C{(lat, lon, height, datum)} if B{C{LatLon}} is C{None}.
@raise TypeError: If B{C{LatLon}} or B{C{datum}} is not ellipsoidal or not valid. '''
c = c.toDatum(datum)
while True:
'''Return a string representation of this L{Lcc} position.
@kwarg prec: Optional number of decimals, unstripped (C{int}). @kwarg fmt: Optional, enclosing backets format (C{str}). @kwarg sep: Optional separator between name:values (C{str}). @kwarg m: Optional unit of the height, default meter (C{str}). @kwarg C: Optionally, include name of conic and datum (C{bool}).
@return: This Lcc as "[E:meter, N:meter, H:m, C:Conic.Datum]" (C{str}). ''' t += self.conic.name2, T += _C_,
'''Return a string representation of this L{Lcc} position.
@kwarg prec: Optional number of decimal, unstripped (C{int}). @kwarg sep: Optional separator to join (C{str}) or C{None} to return an unjoined C{tuple} of C{str}s. @kwarg m: Optional height units, default C{meter} (C{str}).
@return: This Lcc as "easting nothing" C{str} in C{meter} plus " height" and 'm' if heigth is non-zero (C{str}).
@example:
>>> lb = Lcc(448251, 5411932.0001) >>> lb.toStr(4) # 448251.0 5411932.0001 >>> lb.toStr(sep=', ') # 448251, 5411932 '''
**Lcc_kwds): '''Convert an (ellipsoidal) geodetic point to a I{Lambert} location.
@arg latlon: Ellipsoidal point (C{LatLon}). @kwarg conic: Optional Lambert projection to use (L{Conic}). @kwarg height: Optional height for the point, overriding the default height (C{meter}). @kwarg Lcc: Optional class to return the I{Lambert} location (L{Lcc}). @kwarg name: Optional B{C{Lcc}} name (C{str}). @kwarg Lcc_kwds: Optional, additional B{C{Lcc}} keyword arguments, ignored if B{C{Lcc=None}}.
@return: The I{Lambert} location (L{Lcc}) or an L{EasNor3Tuple}C{(easting, northing, height)} if B{C{Lcc}} is C{None}.
@raise TypeError: If B{C{latlon}} is not ellipsoidal. '''
Lcc(e, n, h=h, conic=c, **Lcc_kwds)
if __name__ == '__main__':
# print all for c in (Conics,): c = '\n' + repr(c) print('\n# '.join(c.split('\n')))
# **) MIT License # # Copyright (C) 2016-2020 -- 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.
# % python -m pygeodesy.lcc
# Conics.Be08Lb: Conic(name='Be08Lb', lat0=50.797815, lon0=4.35921583, par1=49.833333, par2=51.166667, E0=649328, N0=665262, k0=1, SP=2, datum=Datum(name='GRS80', ellipsoid=Ellipsoids.GRS80, transform=Transforms.WGS84), # Conics.Be72Lb: Conic(name='Be72Lb', lat0=90, lon0=4.3674867, par1=49.8333339, par2=51.1666672, E0=150000.013, N0=5400088.438, k0=1, SP=2, datum=Datum(name='NAD83', ellipsoid=Ellipsoids.GRS80, transform=Transforms.NAD83), # Conics.Fr93Lb: Conic(name='Fr93Lb', lat0=46.5, lon0=3, par1=49, par2=44, E0=700000, N0=6600000, k0=1, SP=2, datum=Datum(name='WGS84', ellipsoid=Ellipsoids.WGS84, transform=Transforms.WGS84), # Conics.MaNLb: Conic(name='MaNLb', lat0=33.3, lon0=-5.4, par1=31.73, par2=34.87, E0=500000, N0=300000, k0=1, SP=2, datum=Datum(name='NTF', ellipsoid=Ellipsoids.Clarke1880IGN, transform=Transforms.NTF), # Conics.MxLb: Conic(name='MxLb', lat0=12, lon0=-102, par1=17.5, par2=29.5, E0=2500000, N0=0, k0=1, SP=2, datum=Datum(name='WGS84', ellipsoid=Ellipsoids.WGS84, transform=Transforms.WGS84), # Conics.PyT_Lb: Conic(name='PyT_Lb', lat0=46.8, lon0=2.33722917, par1=45.8989389, par2=47.6960144, E0=600000, N0=200000, k0=1, SP=2, datum=Datum(name='NTF', ellipsoid=Ellipsoids.Clarke1880IGN, transform=Transforms.NTF), # Conics.USA_Lb: Conic(name='USA_Lb', lat0=23, lon0=-96, par1=33, par2=45, E0=0, N0=0, k0=1, SP=2, datum=Datum(name='WGS84', ellipsoid=Ellipsoids.WGS84, transform=Transforms.WGS84), # Conics.WRF_Lb: Conic(name='WRF_Lb', lat0=40, lon0=-97, par1=33, par2=45, E0=0, N0=0, k0=1, SP=2, datum=Datum(name='WGS84', ellipsoid=Ellipsoids.WGS84, transform=Transforms.WGS84) |