Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
GEODSOLVE(1)		    GeographicLib Utilities		  GEODSOLVE(1)

NAME
       GeodSolve -- perform geodesic calculations

SYNOPSIS
       GeodSolve [ -i |	-L lat1	lon1 azi1 | -D lat1 lon1 azi1 s13 | -I lat1
       lon1 lat3 lon3 ]	[ -a ] [ -e a f	] [ -u ] [ -F ]	[ -d | -: ] [ -w ] [
       -b ] [ -f ] [ -p	prec ] [ -E ] [	--comment-delimiter commentdelim ] [
       --version | -h |	--help ] [ --input-file	infile | --input-string
       instring	] [ --line-separator linesep ] [ --output-file outfile ]

DESCRIPTION
       The shortest path between two points on the ellipsoid at	(lat1, lon1)
       and (lat2, lon2)	is called the geodesic.	 Its length is s12 and the
       geodesic	from point 1 to	point 2	has forward azimuths azi1 and azi2 at
       the two end points.

       GeodSolve operates in one of three modes:

       1.  By	default,   GeodSolve  accepts  lines  on  the  standard	 input
	   containing lat1 lon1	azi1 s12 and prints lat2 lon2 azi2 on standard
	   output.  This is the	direct geodesic	calculation.

       2.  With	the -i command line argument, GeodSolve	performs  the  inverse
	   geodesic  calculation.   It	reads  lines containing	lat1 lon1 lat2
	   lon2	and prints the corresponding values of azi1 azi2 s12.

       3.  Command line	arguments -L lat1 lon1 azi1 specify a  geodesic	 line.
	   GeodSolve  then  accepts a sequence of s12 values (one per line) on
	   standard input and prints lat2 lon2 azi2 for	each.  This  generates
	   a  sequence of points on a single geodesic.	Command	line arguments
	   -D and -I work similarly with the geodesic line defined in terms of
	   a direct or inverse geodesic	calculation, respectively.

OPTIONS
       -i  perform an inverse geodesic calculation (see	2 above).

       -L lat1 lon1 azi1
	   line	mode (see 3 above); generate a sequence	of  points  along  the
	   geodesic  specified	by lat1	lon1 azi1.  The	-w flag	can be used to
	   swap	the default order of the 2  geographic	coordinates,  provided
	   that	it appears before -L.

       -D lat1 lon1 azi1 s13
	   line	 mode  (see  3 above); generate	a sequence of points along the
	   geodesic specified by lat1 lon1 azi1	s13.  The -w flag can be  used
	   to swap the default order of	the 2 geographic coordinates, provided
	   that	 it  appears before -D.	 Similarly, the	-a flag	can be used to
	   change the interpretation of	s13 to a13, provided that  it  appears
	   before -D.

       -I lat1 lon1 lat3 lon3
	   line	 mode  (see  3 above); generate	a sequence of points along the
	   geodesic specified by lat1 lon1 lat3	lon3.  The -w flag can be used
	   to swap the default order of	the 2 geographic coordinates, provided
	   that	it appears before -I.

       -a  toggle the arc mode flag (it	starts off); if	this flag is on,  then
	   on  input  and  output  s12	is  replaced by	a12 the	arc length (in
	   degrees) on the auxiliary sphere.  See "AUXILIARY SPHERE".

       -e a f
	   specify  the	 ellipsoid  via	 the  equatorial  radius,  a  and  the
	   flattening,	f.   Setting f = 0 results in a	sphere.	 Specify f < 0
	   for a prolate  ellipsoid.   A  simple  fraction,  e.g.,  1/297,  is
	   allowed  for	 f.   By  default,  the	 WGS84	ellipsoid is used, a =
	   6378137 m, f	= 1/298.257223563.

       -u  unroll the longitude.  Normally, on output longitudes  are  reduced
	   to lie in [-180deg,180deg).	However	with this option, the returned
	   longitude  lon2  is	"unrolled"  so	that lon2 - lon1 indicates how
	   often and in	what sense the geodesic	has encircled the earth.   Use
	   the -f option, to get both longitudes printed.

       -F  fractional  mode.   This  only  has	any  effect with the -D	and -I
	   options (and	is otherwise ignored).	The values  read  on  standard
	   input  are interpreted as fractional	distances to point 3, i.e., as
	   s12/s13 instead of s12.  If arc mode	is in effect, then the	values
	   denote  fractional  arc  length,  i.e.,  a12/a13.   The  fractional
	   distances can be entered as a simple	fraction, e.g.,	3/4.

       -d  output angles as  degrees,  minutes,	 seconds  instead  of  decimal
	   degrees.

       -:  like	 -d,  except  use  : as	a separator instead of the d, ', and "
	   delimiters.

       -w  toggle the longitude	first flag (it starts off); if the flag	is on,
	   then	on input and output, longitude precedes	latitude (except that,
	   on input, this can be overridden by a hemisphere designator,	N,  S,
	   E, W).

       -b  report the back azimuth at point 2 instead of the forward azimuth.

       -f  full	 output;  each	line of	output consists	of 12 quantities: lat1
	   lon1	azi1 lat2 lon2 azi2 s12	a12 m12	M12 M21	S12.  a12 is described
	   in "AUXILIARY SPHERE".  The four quantities m12, M12, M21, and  S12
	   are described in "ADDITIONAL	QUANTITIES".

       -p prec
	   set the output precision to prec (default 3); prec is the precision
	   relative to 1 m.  See "PRECISION".

       -E  use	"exact"	 algorithms  (based  on	 elliptic  integrals)  for the
	   geodesic calculations.  These are more accurate than	the  (default)
	   series expansions for |f| > 0.02.

       --comment-delimiter commentdelim
	   set	the comment delimiter to commentdelim (e.g., "#" or "//").  If
	   set,	the input lines	will be	scanned	for  this  delimiter  and,  if
	   found, the delimiter	and the	rest of	the line will be removed prior
	   to	processing  and	 subsequently  appended	 to  the  output  line
	   (separated by a space).

       --version
	   print version and exit.

       -h  print usage and exit.

       --help
	   print full documentation and	exit.

       --input-file infile
	   read	input from the file infile instead of from standard  input;  a
	   file	name of	"-" stands for standard	input.

       --input-string instring
	   read	input from the string instring instead of from standard	input.
	   All	occurrences  of	 the  line  separator  character (default is a
	   semicolon) in instring are converted	to newlines before the reading
	   begins.

       --line-separator	linesep
	   set the line	separator character to linesep.	 By default this is  a
	   semicolon.

       --output-file outfile
	   write  output  to the file outfile instead of to standard output; a
	   file	name of	"-" stands for standard	output.

INPUT
       GeodSolve measures all angles in	 degrees  and  all  lengths  (s12)  in
       meters,	and  all  areas	(S12) in meters^2.  On input angles (latitude,
       longitude, azimuth, arc length) can be as decimal degrees  or  degrees,
       minutes,	 seconds.   For	 example, "40d30", "40d30'", "40:30", "40.5d",
       and 40.5	are all	equivalent.  By	default, latitude  precedes  longitude
       for each	point (the -w flag switches this convention); however on input
       either  may  be	given first by appending (or prepending) N or S	to the
       latitude	and E or W to the longitude.  Azimuths are measured  clockwise
       from north; however this	may be overridden with E or W.

       For  details  on	 the  allowed  formats for angles, see the "GEOGRAPHIC
       COORDINATES" section of GeoConvert(1).

AUXILIARY SPHERE
       Geodesics on the	ellipsoid can be transferred to	the  auxiliary	sphere
       on  which  the  distance	 is  measured  in  terms of the	arc length a12
       (measured in degrees) instead of	s12.  In terms of a12, 180 degrees  is
       the  distance from one equator crossing to the next or from the minimum
       latitude	to the maximum latitude.  Geodesics with a12 > 180 degrees  do
       not correspond to shortest paths.  With the -a flag, s12	(on both input
       and  output)  is	replaced by a12.  The -a flag does not affect the full
       output given by the -f flag (which always includes both s12 and a12).

ADDITIONAL QUANTITIES
       The -f flag reports four	additional quantities.

       The reduced length of the geodesic, m12,	is defined such	 that  if  the
       initial	azimuth	 is perturbed by dazi1 (radians) then the second point
       is displaced by	m12  dazi1  in	the  direction	perpendicular  to  the
       geodesic.   m12	is  given  in meters.  On a curved surface the reduced
       length obeys a symmetry relation, m12 + m21 = 0.	 On a flat surface, we
       have m12	= s12.

       M12 and M21 are geodesic	scales.	 If  two  geodesics  are  parallel  at
       point  1	 and separated by a small distance dt, then they are separated
       by a distance M12 dt at point 2.	 M21 is	defined	 similarly  (with  the
       geodesics  being	 parallel to one another at point 2).  M12 and M21 are
       dimensionless quantities.  On a flat surface, we	have M12 = M21 = 1.

       If points 1, 2, and 3 lie on a  single  geodesic,  then	the  following
       addition	rules hold:

	  s13 =	s12 + s23,
	  a13 =	a12 + a23,
	  S13 =	S12 + S23,
	  m13 =	m12 M23	+ m23 M21,
	  M13 =	M12 M23	- (1 - M12 M21)	m23 / m12,
	  M31 =	M32 M21	- (1 - M23 M32)	m12 / m23.

       Finally,	 S12  is the area between the geodesic from point 1 to point 2
       and the equator;	i.e., it is the	area, measured	counter-clockwise,  of
       the   geodesic	quadrilateral	with  corners  (lat1,lon1),  (0,lon1),
       (0,lon2), and (lat2,lon2).  It is given in meters^2.

PRECISION
       prec gives precision of the output with prec = 0	giving 1 m  precision,
       prec  =	3  giving  1  mm precision, etc.  prec is the number of	digits
       after the decimal point for lengths.  For decimal degrees,  the	number
       of  digits  after  the  decimal	point  is  prec	+ 5.  For DMS (degree,
       minute, seconds)	output,	the number of digits after the	decimal	 point
       in  the	seconds	component is prec + 1.	The minimum value of prec is 0
       and the maximum is 10.

ERRORS
       An illegal line of input	will print an error message to standard	output
       beginning with "ERROR:" and causes GeodSolve to return an exit code  of
       1.   However, an	error does not cause GeodSolve to terminate; following
       lines will be converted.

ACCURACY
       Using the (default) series solution, GeodSolve is accurate to about  15
       nm  (15	nanometers)  for the WGS84 ellipsoid.  The approximate maximum
       error (expressed	 as  a	distance)  for	an  ellipsoid  with  the  same
       equatorial  radius  as  the WGS84 ellipsoid and different values	of the
       flattening is

	  |f|	  error
	  0.01	  25 nm
	  0.02	  30 nm
	  0.05	  10 um
	  0.1	 1.5 mm
	  0.2	 300 mm

       If  -E  is  specified,  GeodSolve  is  accurate	to  about  40  nm  (40
       nanometers)  for	 the  WGS84  ellipsoid.	 The approximate maximum error
       (expressed as a distance) for an	ellipsoid with a quarter  meridian  of
       10000 km	and different values of	the a/b	= 1 - f	is

	  1-f	 error (nm)
	  1/128	  387
	  1/64	  345
	  1/32	  269
	  1/16	  210
	  1/8	  115
	  1/4	   69
	  1/2	   36
	    1	   15
	    2	   25
	    4	   96
	    8	  318
	   16	  985
	   32	 2352
	   64	 6008
	  128	19024

MULTIPLE SOLUTIONS
       The  shortest  distance returned	for the	inverse	problem	is (obviously)
       uniquely	defined.  However, in a	few special cases there	 are  multiple
       azimuths	 which yield the same shortest distance.  Here is a catalog of
       those cases:

       lat1 = -lat2 (with neither point	at a pole)
	   If azi1 = azi2, the geodesic	is unique.  Otherwise  there  are  two
	   geodesics  and  the second one is obtained by setting [azi1,azi2] =
	   [azi2,azi1],	[M12,M21] = [M21,M12], S12 = -S12.  (This occurs  when
	   the longitude difference is near +/-180 for oblate ellipsoids.)

       lon2 = lon1 +/- 180 (with neither point at a pole)
	   If azi1 = 0 or +/-180, the geodesic is unique.  Otherwise there are
	   two geodesics and the second	one is obtained	by setting [azi1,azi2]
	   =  [-azi1,-azi2], S12 = -S12.  (This	occurs when lat2 is near -lat1
	   for prolate ellipsoids.)

       Points 1	and 2 at opposite poles
	   There are infinitely	many  geodesics	 which	can  be	 generated  by
	   setting  [azi1,azi2]	= [azi1,azi2] +	[d,-d],	for arbitrary d.  (For
	   spheres,  this  prescription	 applies  when	points	1  and	2  are
	   antipodal.)

       s12 = 0 (coincident points)
	   There  are  infinitely  many	 geodesics  which  can be generated by
	   setting [azi1,azi2] = [azi1,azi2] + [d,d], for arbitrary d.

EXAMPLES
       Route from JFK Airport to Singapore Changi Airport:

	  echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |
	  GeodSolve -i -: -p 0

	  003:18:29.9 177:29:09.2 15347628

       Equally spaced waypoints	on the route:

	  for ((i = 0; i <= 10;	++i)); do echo $i/10; done |
	  GeodSolve -I 40:38:23N 073:46:44W 01:21:33N 103:59:22E -F -: -p 0

	  40:38:23.0N 073:46:44.0W 003:18:29.9
	  54:24:51.3N 072:25:39.6W 004:18:44.1
	  68:07:37.7N 069:40:42.9W 006:44:25.4
	  81:38:00.4N 058:37:53.9W 017:28:52.7
	  83:43:26.0N 080:37:16.9E 156:26:00.4
	  70:20:29.2N 097:01:29.4E 172:31:56.4
	  56:38:36.0N 100:14:47.6E 175:26:10.5
	  42:52:37.1N 101:43:37.2E 176:34:28.6
	  29:03:57.0N 102:39:34.8E 177:07:35.2
	  15:13:18.6N 103:22:08.0E 177:23:44.7
	  01:21:33.0N 103:59:22.0E 177:29:09.2

SEE ALSO
       GeoConvert(1).

       An   online   version   of    this    utility	is    availbable    at
       <https://geographiclib.sourceforge.io/cgi-bin/GeodSolve>.

       The  algorithms	are  described	in  C.	F.  F.	Karney,	Algorithms for
       geodesics,     J.     Geodesy	 87,	  43-55	     (2013);	  DOI:
       <https://doi.org/10.1007/s00190-012-0578-z>;		      addenda:
       <https://geographiclib.sourceforge.io/geod-addenda.html>.

       The     Wikipedia     page,     Geodesics     on	    an	    ellipsoid,
       <https://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid>.

AUTHOR
       GeodSolve was written by	Charles	Karney.

HISTORY
       GeodSolve	  was	       added	     to		GeographicLib,
       <https://geographiclib.sourceforge.io>, in 2009-03.  Prior  to  version
       1.30,  it  was  called Geod.  (The name was changed to avoid a conflict
       with the	geod utility in	proj.4.)

GeographicLib 2.2		  2023-03-06			  GEODSOLVE(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=GeodSolve&sektion=1&manpath=FreeBSD+Ports+15.0>

home | help