# FreeBSD Manual Pages

```GEODESIC(3)		   Library Functions Manual		   GEODESIC(3)

NAME
geod_init - initialize an ellipsoid
geod_direct geod_gendirect - the	direct geodesic	problem
geod_inverse geod_geninverse - the inverse geodesic problem
geod_lineinit  geod_directline  geod_gendirectline  geod_inverseline  -
initialize a geodesic line
geod_setdistance	geod_gensetdistance - set distance to reference	point
geod_position geod_genposition -	a position on a	geodesic line
geod_polygon_init - initialize a	polygon
geod_polygon_compute  geod_polygon_testpoint  geod_polygon_testedge   -
compute properties of polygon
geod_polygon_clear - clear polygon
geod_polygonarea	- the area of a	polygon

SYNOPSIS
#include	<geodesic.h>
and link	against	the proj library.

DESCRIPTION
This library is a port of the geodesic routines in the C++ library, Ge-
ographicLib, to C.  It solves the direct	and inverse geodesic  problems
on  an  ellipsoid  of revolution.  In addition, the reduced length of a
geodesic	and the	area between a geodesic	and the	equator	can be comput-
ed.   The  results are accurate to round	off for	|f| < 1/50, where f is
the flattening.	Note that the geodesic routines	measure	angles	(lati-
tudes,  longitudes,  and	 azimuths)  in degrees,	unlike the rest	of the
proj library, which uses	radians.  The documentation for	 this  library
is included in geodesic.h.  A formatted version of the documentation is
available  at  https://geographiclib.sourceforge.io/1.50/C.    Detailed
documentation   of   the	  interface  is	 given	at  https://geographi-
clib.sourceforge.io/1.50/C/geodesic_8h.html.

EXAMPLE
The following program reads in  lines  with  the	 coordinates  for  two
points in decimal degrees (lat1,	lon1, lat2, lon2) and prints out azi1,
azi2, s12 for the geodesic line between each  pair  of  points  on  the
WGS84 ellipsoid.	 (N.B. azi2 is the forward azimuth at point 2.)

#include	<stdio.h>
#include	<geodesic.h>

int main() {
double	a = 6378137, f = 1/298.257223563; /* WGS84 */
double	lat1, lon1, azi1, lat2,	lon2, azi2, s12;
struct	geod_geodesic g;

geod_init(&g, a, f);
while (scanf("%lf %lf %lf %lf",
&lat1, &lon1, &lat2, &lon2) == 4)	{
geod_inverse(&g, lat1, lon1,	lat2, lon2,
&s12, &azi1, &azi2);
printf("%.8f	%.8f %.3f\n", azi1, azi2, s12);
}
return	0;
}

LIBRARY
libproj.a - library of projections and support procedures

Full online documentation for geodesic(3),
https://geographiclib.sourceforge.io/1.50/C
https://geographiclib.sourceforge.io/1.50/C/geodesic_8h.html

geod(1)

GeographicLib, https://geographiclib.sourceforge.io

The  GeodesicExact  class in GeographicLib solves the geodesic problems
in terms	of elliptic integrals; the results are accurate	for  arbitrary
f.

C. F. F.	Karney,	Algorithms for Geodesics,
J. Geodesy 87, 43-55 (2013);
DOI: https://doi.org/10.1007/s00190-012-0578-z

A geodesic bibliography,
https://geographiclib.sourceforge.io/geodesic-papers/biblio.html

https://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid

BUGS
A  list of known	bugs can found at https://github.com/OSGeo/PROJ/issues
where new bug reports can be submitted too.