66
77import warnings
88
9+ from ._typing import FloatArray , FloatLike
910import logging
1011from copy import copy
11- from math import nan , pi , tau
1212
1313from .ellipsoid import Ellipsoid , resolve_ellipsoid
14- from .mathfun import (
15- asin ,
16- atan ,
17- atan2 ,
18- cos ,
19- degrees ,
20- isnan ,
21- linspace ,
22- radians ,
23- sign ,
24- sin ,
25- sqrt ,
26- tan ,
27- )
14+ from .mathfun import isnan , linspace , degrees , radians , sign , sqrt , atan2 , cos , sin , tan , asin , atan
15+ from math import pi , tau , nan
2816
2917__all__ = ["vdist" , "vreckon" , "track2" ]
3018
3119
32- def vdist (Lat1 , Lon1 , Lat2 , Lon2 , ell : Ellipsoid | None = None , deg : bool = True ) -> tuple :
20+ def vdist (lat1 , lon1 , lat2 , lon2 , ell : Ellipsoid | None = None , deg : bool = True ) -> tuple :
3321 """
3422 Using the reference ellipsoid, compute the distance between two points
3523 within a few millimeters of accuracy, compute forward azimuth,
@@ -43,13 +31,13 @@ def vdist(Lat1, Lon1, Lat2, Lon2, ell: Ellipsoid | None = None, deg: bool = True
4331 Parameters
4432 ----------
4533
46- Lat1 : float
34+ lat1 : float
4735 Geodetic latitude of first point (degrees)
48- Lon1 : float
36+ lon1 : float
4937 Geodetic longitude of first point (degrees)
50- Lat2 : float
38+ lat2 : float
5139 Geodetic latitude of second point (degrees)
52- Lon2 : float
40+ lon2 : float
5341 Geodetic longitude of second point (degrees)
5442 ell : Ellipsoid, optional
5543 reference ellipsoid
@@ -108,13 +96,10 @@ def vdist(Lat1, Lon1, Lat2, Lon2, ell: Ellipsoid | None = None, deg: bool = True
10896 f = ell .flattening
10997
11098 if deg :
111- Lat1 = radians (Lat1 )
112- Lon1 = radians (Lon1 )
113- Lat2 = radians (Lat2 )
114- Lon2 = radians (Lon2 )
115-
116- # keep old variable names in case someone is using them
117- lat1 , lon1 , lat2 , lon2 = Lat1 , Lon1 , Lat2 , Lon2
99+ lat1 = radians (lat1 )
100+ lon1 = radians (lon1 )
101+ lat2 = radians (lat2 )
102+ lon2 = radians (lon2 )
118103
119104 try :
120105 if (abs (lat1 ) > pi / 2 ).any () | (abs (lat2 ) > pi / 2 ).any ():
@@ -264,13 +249,17 @@ def vdist(Lat1, Lon1, Lat2, Lon2, ell: Ellipsoid | None = None, deg: bool = True
264249 if deg :
265250 a12 = degrees (a12 )
266251
267- try :
268- return dist_m .squeeze ()[()], a12 .squeeze ()[()]
269- except AttributeError :
270- return dist_m , a12
252+ return dist_m , a12
271253
272254
273- def vreckon (Lat1 , Lon1 , Rng , Azim , ell : Ellipsoid | None = None , deg : bool = True ) -> tuple :
255+ def vreckon (
256+ lat1 ,
257+ lon1 ,
258+ rng ,
259+ azim ,
260+ ell : Ellipsoid | None = None ,
261+ deg : bool = True ,
262+ ) -> tuple :
274263 """
275264 This is the Vincenty "forward" solution.
276265
@@ -285,13 +274,13 @@ def vreckon(Lat1, Lon1, Rng, Azim, ell: Ellipsoid | None = None, deg: bool = Tru
285274 Parameters
286275 ----------
287276
288- Lat1 : float
277+ lat1 : float
289278 inital geodetic latitude (degrees)
290- Lon1 : float
279+ lon1 : float
291280 initial geodetic longitude (degrees)
292- Rng : float
281+ rng : float
293282 ground distance (meters)
294- Azim : float
283+ azim : float
295284 intial azimuth (degrees) clockwide from north.
296285 ell : Ellipsoid, optional
297286 reference ellipsoid
@@ -301,9 +290,9 @@ def vreckon(Lat1, Lon1, Rng, Azim, ell: Ellipsoid | None = None, deg: bool = Tru
301290 Results
302291 -------
303292
304- Lat2 : float
293+ lat2 : float
305294 final geodetic latitude (degrees)
306- Lon2 : float
295+ lon2 : float
307296 final geodetic longitude (degrees)
308297
309298
@@ -331,10 +320,10 @@ def vreckon(Lat1, Lon1, Rng, Azim, ell: Ellipsoid | None = None, deg: bool = Tru
331320 """
332321
333322 try :
334- if (Rng < 0.0 ).any ():
323+ if (rng < 0.0 ).any ():
335324 raise ValueError ("Ground distance must be positive" )
336325 except AttributeError :
337- if Rng < 0.0 :
326+ if rng < 0.0 :
338327 raise ValueError ("Ground distance must be positive" )
339328
340329 ell = resolve_ellipsoid (ell )
@@ -344,12 +333,9 @@ def vreckon(Lat1, Lon1, Rng, Azim, ell: Ellipsoid | None = None, deg: bool = Tru
344333 f = ell .flattening
345334
346335 if deg :
347- Lat1 = radians (Lat1 ) # intial latitude in radians
348- Lon1 = radians (Lon1 ) # intial longitude in radians
349- Azim = radians (Azim )
350-
351- # in case someone is using the old variable names
352- lat1 , lon1 = Lat1 , Lon1
336+ lat1 = radians (lat1 ) # intial latitude in radians
337+ lon1 = radians (lon1 ) # intial longitude in radians
338+ azim = radians (azim )
353339
354340 try :
355341 if (abs (lat1 ) > pi / 2 ).any ():
@@ -366,7 +352,7 @@ def vreckon(Lat1, Lon1, Rng, Azim, ell: Ellipsoid | None = None, deg: bool = Tru
366352 if abs (pi / 2 - abs (lat1 )) < 1e-10 :
367353 lat1 = sign (lat1 ) * (pi / 2 - (1e-10 ))
368354
369- alpha1 = Azim # inital azimuth in radians
355+ alpha1 = azim # inital azimuth in radians
370356 sinAlpha1 = sin (alpha1 )
371357 cosAlpha1 = cos (alpha1 )
372358
@@ -380,7 +366,7 @@ def vreckon(Lat1, Lon1, Rng, Azim, ell: Ellipsoid | None = None, deg: bool = Tru
380366 A = 1 + uSq / 16384 * (4096 + uSq * (- 768 + uSq * (320 - 175 * uSq )))
381367 B = uSq / 1024 * (256 + uSq * (- 128 + uSq * (74 - 47 * uSq )))
382368
383- sigma = Rng / (b * A )
369+ sigma = rng / (b * A )
384370 sigmaP = 2 * pi
385371
386372 sinSigma = nan
@@ -414,7 +400,7 @@ def vreckon(Lat1, Lon1, Rng, Azim, ell: Ellipsoid | None = None, deg: bool = Tru
414400 )
415401 )
416402 sigmaP = sigma
417- sigma = Rng / (b * A ) + deltaSigma
403+ sigma = rng / (b * A ) + deltaSigma
418404 try :
419405 i = (abs (sigma - sigmaP ) > 1e-12 ).any ()
420406 except AttributeError :
@@ -448,10 +434,7 @@ def vreckon(Lat1, Lon1, Rng, Azim, ell: Ellipsoid | None = None, deg: bool = Tru
448434 lat2 = degrees (lat2 )
449435 lon2 = degrees (lon2 )
450436
451- try :
452- return lat2 .squeeze ()[()], lon2 .squeeze ()[()]
453- except AttributeError :
454- return lat2 , lon2
437+ return lat2 , lon2
455438
456439
457440def track2 (
0 commit comments