Coverage for pygeodesy/webmercator.py : 93%

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 -*-
L{parseWM} and L{toWm}.
Pure Python implementation of a U{Web Mercator<https://WikiPedia.org/wiki/Web_Mercator>} (aka I{Pseudo-Mercator}) class and conversion functions for spherical and near-spherical earth models.
References U{Google Maps / Bing Maps Spherical Mercator Projection <https://AlastairA.WordPress.com/2011/01/23/the-google-maps-bing-maps-spherical-mercator-projection>}, U{Geomatics Guidance Note 7, part 2<https://www.EPSG.org/Portals/0/373-07-02.pdf>} and U{Implementation Practice Web Mercator Map Projection <https://Earth-Info.NGA.mil/GandG/wgs84/web_mercator/%28U%29%20NGA_SIG_0011_1.0.0_WEBMERC.pdf>}.
@newfield example: Example, Examples '''
_NamedBase, nameof, _xnamed property_RO
# all public contants, classes and functions
# _FalseEasting = 0 #: (INTERNAL) False Easting (C{meter}). # _FalseNorthing = 0 #: (INTERNAL) False Northing (C{meter}). # _LonOrigin = 0 #: (INTERNAL) Longitude of natural origin (C{degrees}).
'''Web Mercator (WM) parse or L{Wm} issue. '''
'''Web Mercator (WM) coordinate. '''
'''New L{Wm} Web Mercator (WM) coordinate.
@param x: Easting from central meridian (C{meter}). @param y: Northing from equator (C{meter}). @keyword radius: Optional earth radius (C{meter}). @keyword name: Optional name (C{str}).
@raise WebMercatorError: Invalid B{C{x}}, B{C{y}} or B{C{radius}}.
@example:
>>> import pygeodesy >>> w = pygeodesy.Wm(448251, 5411932) ''' self.name = name
except (TypeError, ValueError): raise WebMercatorError('%s invalid: %r' % (Wm.__name__, (x, y, radius)))
t = '%s.%s' % (self.classname, 'radius') raise WebMercatorError('%s invalid: %r' % (t, r))
'''Parse a string to a WM coordinate.
For more details, see function L{parseWM} in this module L{webmercator}. '''
def radius(self): '''Get the earth radius (C{meter}). '''
'''Convert this WM coordinate to a geodetic lat- and longitude.
@keyword datum: Optional datum (C{Datum}).
@return: A L{LatLon2Tuple}C{(lat, lon)}.
@raise TypeError: Non-ellipsoidal B{C{datum}}. ''' raise _IsNotError('ellipsoidal', datum=datum) # <https://Earth-Info.NGA.mil/GandG/wgs84/web_mercator/ # %28U%29%20NGA_SIG_0011_1.0.0_WEBMERC.pdf>
'''Convert this WM coordinate to a geodetic point.
@param LatLon: Ellipsoidal (sub-)class to return the point (C{LatLon}). @keyword datum: Optional datum for ellipsoidal or C{None} for spherical B{C{LatLon}} (C{Datum}).
@return: Point of this WM coordinate (B{C{LatLon}}).
@raise TypeError: If B{C{LatLon}} and B{C{datum}} are incompatible or if B{C{datum}} is not ellipsoidal.
@example:
>>> w = Wm(448251.795, 5411932.678) >>> from pygeodesy import sphericalTrigonometry as sT >>> ll = w.toLatLon(sT.LatLon) # 43°39′11.58″N, 004°01′36.17″E ''' else: raise TypeError('%s %r and %s %r' % ('spherical', LatLon, 'datum', datum))
'''Return a string representation of this WM coordinate.
@keyword prec: Optional number of decimals, unstripped (C{int}). @keyword sep: Optional separator to join (C{str}). @keyword radius: Optionally, include radius (C{bool} or C{scalar}).
@return: This WM as "meter meter" (C{str}) plus " radius" if B{C{radius}} is C{True} or C{scalar}.
@raise WebMercatorError: Invalid B{C{radius}}.
@example:
>>> w = Wm(448251, 5411932.0001) >>> w.toStr(4) # 448251.0 5411932.0001 >>> w.toStr(sep=', ') # 448251, 5411932 ''' elif isscalar(radius): fs += (radius,) else: raise WebMercatorError('% invalid: %r' % ('radius', radius))
'''Return a string representation of this WM coordinate.
@keyword prec: Optional number of decimals, unstripped (C{int}). @keyword fmt: Optional, enclosing backets format (C{str}). @keyword sep: Optional separator between name:value pairs (C{str}). @keyword radius: Optionally, include radius (C{bool} or C{scalar}).
@return: This WM as "[x:meter, y:meter]" (C{str}) plus ", radius:meter]" if B{C{radius}} is C{True} or C{scalar}.
@raise WebMercatorError: Invalid B{C{radius}}. '''
def x(self): '''Get the easting (C{meter}).''' return self._x
def y(self): '''Get the northing (C{meter}). '''
'''Parse a string representing a WM coordinate, consisting of easting, northing and an optional radius.
@param strWM: A WM coordinate (C{str}). @keyword radius: Optional earth radius (C{meter}). @keyword Wm: Optional (sub-)class to return the WM coordinate (L{Wm}) or C{None}. @keyword name: Optional name (C{str}).
@return: The WM coordinate (B{C{Wm}}) or an L{EasNorRadius3Tuple}C{(easting, northing, radius)} if B{C{Wm}} is C{None}.
@raise WebMercatorError: Invalid B{C{strWM}}.
@example:
>>> u = parseWM('448251 5411932') >>> u.toStr2() # [E:448251, N:5411932] ''' raise ValueError # caught below
except (TypeError, ValueError): raise WebMercatorError('%s invalid: %r' % ('strWM', strWM))
Wm(x, y, radius=r)
'''Convert a lat-/longitude point to a WM coordinate.
@param latlon: Latitude (C{degrees}) or an (ellipsoidal or spherical) geodetic C{LatLon} point. @keyword lon: Optional longitude (C{degrees} or C{None}). @keyword radius: Optional earth radius (C{meter}). @keyword Wm: Optional (sub-)class to return the WM coordinate (L{Wm}) or C{None}. @keyword name: Optional name (C{str}).
@return: The WM coordinate (B{C{Wm}}) or an L{EasNorRadius3Tuple}C{(easting, northing, radius)} if B{C{Wm}} is C{None}.
@raise ValueError: If B{C{lon}} value is missing, if B{C{latlon}} is not scalar, if B{C{latlon}} is beyond the valid WM range and L{rangerrors} is set to C{True} or if B{C{radius}} is invalid.
@example:
>>> p = LatLon(48.8582, 2.2945) # 448251.8 5411932.7 >>> w = toWm(p) # 448252 5411933 >>> p = LatLon(13.4125, 103.8667) # 377302.4 1483034.8 >>> w = toWm(p) # 377302 1483035 '''
Wm(e, n, radius=r)
# **) 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. |