Skip to content

Commit e852625

Browse files
committed
1 parent 7b2ac9d commit e852625

File tree

15 files changed

+81
-27
lines changed

15 files changed

+81
-27
lines changed

pymap3d/ecef.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ def ecef2geodetic(
7474
) -> typing.Tuple["ndarray", "ndarray", "ndarray"]:
7575
if vectorize is not None:
7676
fun = vectorize(ecef2geodetic_point)
77-
return fun(x, y, z, ell, deg)
77+
lat, lon, alt = fun(x, y, z, ell, deg)
78+
return lat[()], lon[()], alt[()]
7879
else:
7980
return ecef2geodetic_point(x, y, z, ell, deg)
8081

@@ -102,7 +103,7 @@ def ecef2geodetic_point(x: float, y: float, z: float, ell: Ellipsoid = None, deg
102103
target geodetic latitude
103104
lon : float
104105
target geodetic longitude
105-
h : float
106+
alt : float
106107
target altitude above geodetic ellipsoid (meters)
107108
108109
based on:

pymap3d/enu.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ def enu2aer(e: "ndarray", n: "ndarray", u: "ndarray", deg: bool = True) -> typin
4848
"""
4949
if vectorize is not None:
5050
fun = vectorize(enu2aer_point)
51-
return fun(e, n, u, deg)
51+
az, el, rng = fun(e, n, u, deg)
52+
return az[()], el[()], rng[()]
5253
else:
5354
return enu2aer_point(e, n, u, deg)
5455

@@ -79,7 +80,8 @@ def enu2aer_point(e: "ndarray", n: "ndarray", u: "ndarray", deg: bool = True) ->
7980
def aer2enu(az: "ndarray", el: "ndarray", srange: "ndarray", deg: bool = True) -> typing.Tuple["ndarray", "ndarray", "ndarray"]:
8081
if vectorize is not None:
8182
fun = vectorize(aer2enu_point)
82-
return fun(az, el, srange, deg)
83+
e, n, u = fun(az, el, srange, deg)
84+
return e[()], n[()], u[()]
8385
else:
8486
return aer2enu_point(az, el, srange, deg)
8587

pymap3d/latitude.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ def geodetic2isometric(geodetic_lat: "ndarray", ell: Ellipsoid = None, deg: bool
205205
"""
206206
if use_numpy:
207207
fun = vectorize(geodetic2isometric_point)
208-
return fun(geodetic_lat, ell, deg)
208+
return fun(geodetic_lat, ell, deg)[()]
209209
else:
210210
return geodetic2isometric_point(geodetic_lat, ell, deg)
211211

@@ -320,7 +320,7 @@ def geodetic2conformal(geodetic_lat: "ndarray", ell: Ellipsoid = None, deg: bool
320320
"""
321321
if use_numpy:
322322
fun = vectorize(geodetic2conformal_point)
323-
return fun(geodetic_lat, ell, deg)
323+
return fun(geodetic_lat, ell, deg)[()]
324324
else:
325325
return geodetic2conformal_point(geodetic_lat, ell, deg)
326326

pymap3d/los.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ def lookAtSpheroid(
4646
Results
4747
-------
4848
49-
lat0 : "ndarray"
49+
lat : "ndarray"
5050
geodetic latitude where the line-of-sight intersects with the Earth ellipsoid
51-
lon0 : "ndarray"
51+
lon : "ndarray"
5252
geodetic longitude where the line-of-sight intersects with the Earth ellipsoid
5353
d : "ndarray"
5454
slant range (meters) from starting point to intersect point
@@ -59,7 +59,8 @@ def lookAtSpheroid(
5959
"""
6060
if vectorize is not None:
6161
fun = vectorize(lookAtSpheroid_point)
62-
return fun(lat0, lon0, h0, az, tilt, ell, deg)
62+
lat, lon, d = fun(lat0, lon0, h0, az, tilt, ell, deg)
63+
return lat[()], lon[()], d[()]
6364
else:
6465
return lookAtSpheroid_point(lat0, lon0, h0, az, tilt, ell, deg)
6566

pymap3d/lox.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ def loxodrome_inverse(
116116
"""
117117
if vectorize is not None:
118118
fun = vectorize(loxodrome_inverse_point)
119-
return fun(lat1, lon1, lat2, lon2, ell, deg)
119+
lox, az = fun(lat1, lon1, lat2, lon2, ell, deg)
120+
return lox[()], az[()]
120121
else:
121122
return loxodrome_inverse_point(lat1, lon1, lat2, lon2, ell, deg)
122123

@@ -179,7 +180,8 @@ def loxodrome_direct(
179180
"""
180181
if vectorize is not None:
181182
fun = vectorize(loxodrome_direct_point)
182-
return fun(lat1, lon1, rng, a12, ell, deg)
183+
lat2, lon2 = fun(lat1, lon1, rng, a12, ell, deg)
184+
return lat2[()], lon2[()]
183185
else:
184186
return loxodrome_direct_point(lat1, lon1, rng, a12, ell, deg)
185187

pymap3d/vincenty.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ def vdist(
9696
"""
9797
if numpy is not None:
9898
fun = numpy.vectorize(vdist_point)
99-
return fun(Lat1, Lon1, Lat2, Lon2, ell)
99+
dist, az = fun(Lat1, Lon1, Lat2, Lon2, ell)
100+
return dist[()], az[()]
100101
else:
101102
return vdist_point(Lat1, Lon1, Lat2, Lon2, ell)
102103

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = pymap3d
3-
version = 2.2.0
3+
version = 2.3.0
44
author = Michael Hirsch, Ph.D.
55
author_email = [email protected]
66
description = pure Python (no prereqs) coordinate conversions, following convention of several popular Matlab routines.

tests/test_aer.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,28 @@ def test_ecef2aer(xyz, lla, aer):
4646

4747
@pytest.mark.parametrize("aer,enu", [((33, 70, 1000), (186.2775, 286.8422, 939.6926))])
4848
def test_aer_enu(aer, enu):
49-
assert pm.aer2enu(*aer) == approx(enu)
49+
e, n, u = pm.aer2enu(*aer)
50+
assert e == approx(enu[0])
51+
assert n == approx(enu[1])
52+
assert u == approx(enu[2])
53+
assert isinstance(e, float)
54+
assert isinstance(n, float)
55+
assert isinstance(u, float)
5056

5157
raer = (radians(aer[0]), radians(aer[1]), aer[2])
5258
assert pm.aer2enu(*raer, deg=False) == approx(enu)
5359

5460
with pytest.raises(ValueError):
5561
pm.aer2enu(aer[0], aer[1], -1)
5662

57-
assert pm.enu2aer(*enu) == approx(aer)
63+
a, e, r = pm.enu2aer(*enu)
64+
assert a == approx(aer[0])
65+
assert e == approx(aer[1])
66+
assert r == approx(aer[2])
67+
assert isinstance(a, float)
68+
assert isinstance(e, float)
69+
assert isinstance(r, float)
70+
5871
assert pm.enu2aer(*enu, deg=False) == approx(raer)
5972

6073

tests/test_enu.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ def test_enu_ecef(enu, lla, xyz):
3737
assert x == approx(xyz[0])
3838
assert y == approx(xyz[1])
3939
assert z == approx(xyz[2])
40+
assert isinstance(x, float)
41+
assert isinstance(y, float)
42+
assert isinstance(z, float)
4043

4144
rlla = (radians(lla[0]), radians(lla[1]), lla[2])
4245
assert pm.enu2ecef(*enu, *rlla, deg=False) == approx(xyz)
@@ -45,6 +48,9 @@ def test_enu_ecef(enu, lla, xyz):
4548
assert e == approx(enu[0])
4649
assert n == approx(enu[1])
4750
assert u == approx(enu[2])
51+
assert isinstance(e, float)
52+
assert isinstance(n, float)
53+
assert isinstance(u, float)
4854

4955
e, n, u = pm.ecef2enu(*xyz, *rlla, deg=False)
5056
assert e == approx(enu[0])

tests/test_geodetic.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,13 @@ def test_ecef2geodetic(xyz, lla):
146146
[((33, 77, 1000), (42.0016981935, -81.99852, 1174.374035), (42, -82, 200)), ((0, 90, 10000), (0, 0, 10000), (0, 0, 0))],
147147
)
148148
def test_aer_geodetic(aer, lla, lla0):
149-
assert pm.aer2geodetic(*aer, *lla0) == approx(lla)
149+
lat1, lon1, alt1 = pm.aer2geodetic(*aer, *lla0)
150+
assert lat1 == approx(lla[0])
151+
assert lon1 == approx(lla[1])
152+
assert alt1 == approx(lla[2])
153+
assert isinstance(lat1, float)
154+
assert isinstance(lon1, float)
155+
assert isinstance(alt1, float)
150156

151157
raer = (radians(aer[0]), radians(aer[1]), aer[2])
152158
rlla0 = (radians(lla0[0]), radians(lla0[1]), lla0[2])

0 commit comments

Comments
 (0)