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.  (-l is an alternative, deprecated,
	   spelling of this flag.)

       -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 1.50.1		  2019-12-12			  GEODSOLVE(1)

NAME | SYNOPSIS | DESCRIPTION | OPTIONS | INPUT | AUXILIARY SPHERE | ADDITIONAL QUANTITIES | PRECISION | ERRORS | ACCURACY | MULTIPLE SOLUTIONS | EXAMPLES | SEE ALSO | AUTHOR | HISTORY

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

home | help