geod_init(3) initialize an ellipsoid


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


This library is a port of the geodesic routines in the C++ library, GeographicLib, 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 computed. The results are accurate to round off for |f| < 1/50, where f is the flattening. Note that the geodesic routines measure angles (latitudes, 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


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\n",
               &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;


libproj.a - library of projections and support procedures


A list of known bugs can found at where new bug reports can be submitted too.