Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def geodetic2isometric_point(geodetic_lat: float, ell: Ellipsoid = None, deg: bool = True) -> float:
geodetic_lat, ell = sanitize(geodetic_lat, ell, deg)
e = ell.eccentricity
if abs(geodetic_lat - pi / 2) <= 1e-9:
isometric_lat = inf
elif abs(-geodetic_lat - pi / 2) <= 1e-9:
isometric_lat = -inf
else:
isometric_lat = asinh(tan(geodetic_lat)) - e * atanh(e * sin(geodetic_lat))
# same results
# a1 = e * sin(geodetic_lat)
# y = (1 - a1) / (1 + a1)
# a2 = pi / 4 + geodetic_lat / 2
# isometric_lat = log(tan(a2) * (y ** (e / 2)))
# isometric_lat = log(tan(a2)) + e/2 * log((1-e*sin(geodetic_lat)) / (1+e*sin(geodetic_lat)))
reference ellipsoid (default WGS84)
deg : bool, optional
degrees input/output (False: radians in/out)
Returns
-------
geodetic_lat : "ndarray"
geodetic latiude
Notes
-----
Equations from J. P. Snyder, "Map Projections - A Working Manual",
US Geological Survey Professional Paper 1395, US Government Printing
Office, Washington, DC, 1987, pp. 13-18.
"""
parametric_lat, ell = sanitize(parametric_lat, ell, deg)
geodetic_lat = atan(tan(parametric_lat) / sqrt(1 - (ell.eccentricity) ** 2))
return degrees(geodetic_lat) if deg else geodetic_lat
deg : bool, optional
degrees input/output (False: radians in/out)
Returns
-------
rectifying_lat : "ndarray"
rectifying latiude
Notes
-----
Equations from J. P. Snyder, "Map Projections - A Working Manual",
US Geological Survey Professional Paper 1395, US Government Printing
Office, Washington, DC, 1987, pp. 13-18.
"""
geodetic_lat, ell = sanitize(geodetic_lat, ell, deg)
n = ell.thirdflattening
f1 = 3 * n / 2 - 9 * n ** 3 / 16
f2 = 15 * n ** 2 / 16 - 15 * n ** 4 / 32
f3 = 35 * n ** 3 / 48
f4 = 315 * n ** 4 / 512
rectifying_lat = (
geodetic_lat
- f1 * sin(2 * geodetic_lat)
+ f2 * sin(4 * geodetic_lat)
- f3 * sin(6 * geodetic_lat)
+ f4 * sin(8 * geodetic_lat)
)
return degrees(rectifying_lat) if deg else rectifying_lat
degrees input/output (False: radians in/out)
Returns
-------
ECEF (Earth centered, Earth fixed) x,y,z
x : "ndarray"
target x ECEF coordinate (meters)
y : "ndarray"
target y ECEF coordinate (meters)
z : "ndarray"
target z ECEF coordinate (meters)
"""
lat, ell = sanitize(lat, ell, deg)
if deg:
lon = radians(lon)
# radius of curvature of the prime vertical section
N = ell.semimajor_axis ** 2 / sqrt(ell.semimajor_axis ** 2 * cos(lat) ** 2 + ell.semiminor_axis ** 2 * sin(lat) ** 2)
# Compute cartesian (geocentric) coordinates given (curvilinear) geodetic
# coordinates.
x = (N + alt) * cos(lat) * cos(lon)
y = (N + alt) * cos(lat) * sin(lon)
z = (N * (ell.semiminor_axis / ell.semimajor_axis) ** 2 + alt) * sin(lat)
return x, y, z
reference ellipsoid (default WGS84)
deg : bool, optional
degrees input/output (False: radians in/out)
Returns
-------
geodetic_lat : "ndarray"
geodetic latiude
Notes
-----
Equations from J. P. Snyder, "Map Projections - A Working Manual",
US Geological Survey Professional Paper 1395, US Government Printing
Office, Washington, DC, 1987, pp. 13-18.
"""
geocentric_lat, ell = sanitize(geocentric_lat, ell, deg)
r = rcurve_transverse(geocentric_lat, ell, deg=False)
geodetic_lat = atan(tan(geocentric_lat) / (1 - ell.eccentricity ** 2 * (r / (r + alt_m))))
return degrees(geodetic_lat) if deg else geodetic_lat
reference ellipsoid (default WGS84)
deg : bool, optional
degrees input/output (False: radians in/out)
Returns
-------
geocentric_lat : "ndarray"
geocentric latiude
Notes
-----
Equations from J. P. Snyder, "Map Projections - A Working Manual",
US Geological Survey Professional Paper 1395, US Government Printing
Office, Washington, DC, 1987, pp. 13-18.
"""
geodetic_lat, ell = sanitize(geodetic_lat, ell, deg)
r = rcurve_transverse(geodetic_lat, ell, deg=False)
geocentric_lat = atan((1 - ell.eccentricity ** 2 * (r / (r + alt_m))) * tan(geodetic_lat))
return degrees(geocentric_lat) if deg else geocentric_lat
reference ellipsoid (default WGS84)
deg : bool, optional
degrees input/output (False: radians in/out)
Returns
-------
geodetic_lat : "ndarray"
geodetic latiude
Notes
-----
Equations from J. P. Snyder, "Map Projections - A Working Manual",
US Geological Survey Professional Paper 1395, US Government Printing
Office, Washington, DC, 1987, pp. 13-18.
"""
authalic_lat, ell = sanitize(authalic_lat, ell, deg)
e = ell.eccentricity
f1 = e ** 2 / 3 + 31 * e ** 4 / 180 + 517 * e ** 6 / 5040
f2 = 23 * e ** 4 / 360 + 251 * e ** 6 / 3780
f3 = 761 * e ** 6 / 45360
geodetic_lat = authalic_lat + f1 * sin(2 * authalic_lat) + f2 * sin(4 * authalic_lat) + f3 * sin(6 * authalic_lat)
return degrees(geodetic_lat) if deg else geodetic_lat
Parameters
----------
lat : "ndarray"
latitude (degrees)
ell : Ellipsoid, optional
reference ellipsoid
deg : bool, optional
degrees input/output (False: radians in/out)
Returns
-------
radius: "ndarray"
radius of ellipsoid
"""
lat, ell = sanitize(lat, ell, deg)
return ell.semimajor_axis / sqrt(1 - (ell.eccentricity * sin(lat)) ** 2)
deg : bool, optional
degrees input/output (False: radians in/out)
Returns
-------
parametric_lat : "ndarray"
parametric latiude
Notes
-----
Equations from J. P. Snyder, "Map Projections - A Working Manual",
US Geological Survey Professional Paper 1395, US Government Printing
Office, Washington, DC, 1987, pp. 13-18.
"""
geodetic_lat, ell = sanitize(geodetic_lat, ell, deg)
parametric_lat = atan(sqrt(1 - (ell.eccentricity) ** 2) * tan(geodetic_lat))
return degrees(parametric_lat) if deg else parametric_lat