Coverage for pygeodesy/lcc.py : 91%

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 '''
_NamedBase, _NamedEnum, _NamedEnumItem, nameof, \ _xnamed issubclassof, property_RO, sincos2, tanPI_2_2, \ _TypeError
# all public constants, classes and functions
'''Lambert conformal conic projection (1- or 2-SP). '''
k0=1, opt3=0, name='', auth=''): '''New Lambert conformal conic projection.
@param latlon0: Origin with (ellipsoidal) datum (C{LatLon}). @param par1: First standard parallel (C{degrees90}). @keyword par2: Optional, second standard parallel (C{degrees90}). @keyword E0: Optional, false easting (C{meter}). @keyword N0: Optional, false northing (C{meter}). @keyword k0: Optional scale factor (C{scalar}). @keyword opt3: Optional meridian (C{degrees180}). @keyword name: Optional name of the conic (C{str}). @keyword auth: Optional authentication authority (C{str}).
@return: A Lambert projection (L{Conic}).
@raise TypeError: Non-ellipsoidal B{C{latlon0}}.
@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._par2 = self._par1 else:
self._k0 = float(k0)
def auth(self): '''Get the authentication authority (C{str}). ''' return self._auth
def datum(self): '''Get the datum (L{Datum}). '''
def E0(self): '''Get the false easting (C{meter}). '''
def k0(self): '''Get scale factor (C{float}). '''
def lat0(self): '''Get the origin latitude (C{degrees90}). '''
def lon0(self): '''Get the central meridian (C{degrees180}). '''
def N0(self): '''Get the false northing (C{meter}). '''
def name2(self): '''Get the conic and datum names as "conic.datum" (C{str}). '''
def par1(self): '''Get the 1st standard parallel (C{degrees90}). '''
def par2(self): '''Get the 2nd standard parallel (C{degrees90}). '''
def opt3(self): '''Get the optional meridian (C{degrees180}). ''' return degrees180(self._opt3)
def SP(self): '''Get the number of standard parallels (C{int}). '''
'''Convert this conic to the given datum.
@param datum: Ellipsoidal datum to use (L{Datum}).
@return: Converted conic, unregistered (L{Conic}).
@raise TypeError: Non-ellipsoidal B{C{datum}}. ''' raise _IsNotError('ellipsoidal', datum=datum)
m1 = c._mdef(c._lat0) t1 = c._tdef(c._lat0) t0 = t1 k = 1 n = sin(c._lat0) sp = 1 else: / (log(t1) - log(t2))
'''Return this conic as a string.
@keyword prec: Optional number of decimals, unstripped (C{int}).
@return: Conic attributes (C{str}). ''' return self._fStr(prec, 'lat0', 'lon0', 'par1', 'E0', 'N0', 'k0', 'SP', datum='(%s)' % (self.datum),) else: 'E0', 'N0', 'k0', 'SP', datum='(%s)' % (self.datum),)
'''(INTERNAL) Copy this conic to c. @param c: Duplicate (L{Conic}). '''
'''(INTERNAL) Compute m(lat). '''
'''(INTERNAL) Compute p(lat). '''
'''(INTERNAL) Compute r(t). '''
'''(INTERNAL) Compute t(lat). '''
'''(INTERNAL) Compute x(t_x). '''
# AsLb = Conic(_LLEB(-14.2666667, 170, datum=Datums.NAD27), 0, 0, E0=500000, N0=0, name='AsLb', auth='EPSG:2155'), # American Samoa ... SP=1 ! Be08Lb = Conic(_LLEB(50.7978150, 4.359215833, datum=Datums.GRS80), 49.833333, 51.166667, E0=649328.0, N0=665262.0, name='Be08Lb', auth='EPSG:9802'), # Belgium Be72Lb = Conic(_LLEB(90, 4.3674867, datum=Datums.NAD83), 49.8333339, 51.1666672, E0=150000.013, N0=5400088.438, name='Be72Lb', auth='EPSG:31370'), # Belgium Fr93Lb = Conic(_LLEB(46.5, 3, datum=Datums.WGS84), 49, 44, E0=700000, N0=6600000, name='Fr93Lb', auth='EPSG:2154'), # RFG93, France MaNLb = Conic(_LLEB(33.3, -5.4, datum=Datums.NTF), 31.73, 34.87, E0=500000, N0=300000, name='MaNLb'), # Marocco MxLb = Conic(_LLEB(12, -102, datum=Datums.WGS84), 17.5, 29.5, E0=2500000, N0=0, name='MxLb', auth='EPSG:2155'), # Mexico PyT_Lb = Conic(_LLEB(46.8, 2.33722917, datum=Datums.NTF), 45.89893890000052, 47.69601440000037, E0=600000, N0=200000, name='PyT_Lb', auth='Test'), # France? USA_Lb = Conic(_LLEB(23, -96, datum=Datums.WGS84), 33, 45, E0=0, N0=0, name='USA_Lb'), # Conterminous, contiguous USA? WRF_Lb = Conic(_LLEB(40, -97, datum=Datums.WGS84), 33, 45, E0=0, N0=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.
@param e: Easting (C{meter}). @param n: Northing (C{meter}). @keyword h: Optional height (C{meter}). @keyword conic: Optional, the conic projection (L{Conic}). @keyword name: Optional name (C{str}).
@return: The Lambert location (L{Lcc}).
@raise TypeError: If B{C{conic}} is not L{Conic}.
@raise LCCError: Invalid or negative B{C{e}} or B{C{n}}.
@example:
>>> lb = Lcc(448251, 5411932.0001) ''' self._height = float(h)
def conic(self): '''Get the conic projection (L{Conic}). '''
def easting(self): '''Get the easting (C{meter}). '''
def height(self): '''Get the height (C{meter}). '''
def northing(self): '''Get the northing (C{meter}). '''
'''Convert this L{Lcc} to a geodetic lat- and longitude.
@keyword 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. ''' c = c.toDatum(datum)
# x, y == lon, lat
'''Convert this L{Lcc} to an (ellipsoidal) geodetic point.
@keyword LatLon: Optional, ellipsoidal (sub-)class to return the geodetic point (C{LatLon}) or C{None}. @keyword datum: Optional datum to use, otherwise use this B{C{Lcc}}'s conic.datum (C{Datum}). @keyword height: Optional height for the point, overriding the default height (C{meter}).
@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. ''' raise _IsNotError(_LLEB.__name__, LatLon=LatLon)
LatLon(a, b, height=h, datum=d)
'''Return a string representation of this L{Lcc} position.
@keyword prec: Optional number of decimal, unstripped (C{int}). @keyword sep: Optional separator to join (C{str}). @keyword 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 ''' fStr(self._northing, prec=prec)] t += ['%+.2f%s' % (self._height, m)]
'''Return a string representation of this L{Lcc} position.
@keyword prec: Optional number of decimals, unstripped (C{int}). @keyword fmt: Optional, enclosing backets format (C{str}). @keyword sep: Optional separator between name:values (C{str}). @keyword m: Optional unit of the height, default meter (C{str}). @keyword 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.toStr(prec=prec, sep=' ', m=m).split() k = 'ENH'[:len(t)] if C: k += 'C' t += [self.conic.name2] return fmt % (sep.join('%s:%s' % t for t in zip(k, t)),)
'''Convert an (ellipsoidal) geodetic point to a Lambert location.
@param latlon: Ellipsoidal point (C{LatLon}). @keyword conic: Optional Lambert projection to use (L{Conic}). @keyword height: Optional height for the point, overriding the default height (C{meter}). @keyword Lcc: Optional (sub-)class to return the Lambert location (L{Lcc}). @keyword name: Optional B{C{Lcc}} name (C{str}).
@return: The 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. ''' raise _IsNotError(_LLEB.__name__, latlon=latlon)
Lcc(e, n, h=h, conic=c)
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=(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=(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=(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=(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=(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=(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=(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=(name='WGS84', ellipsoid=Ellipsoids.WGS84, transform=Transforms.WGS84), |