C library for Geodesics: proj-example.c Source File (original) (raw)

1

2

3

4

5

6 #include <stdio.h>

7 #include <proj.h>

9

11

12

13 double a, invf;

16 const int n = 30;

17 double lat[n+1], lon[n+1], azi[n+1];

18 int i;

19 {

20

21 PJ_CONTEXT* C = proj_context_create();

22 char* argv[3] = {"type=crs", "proj=longlat", "ellps=WGS84"};

23 PJ* P = proj_create_argv(C, 3, argv);

24 if (P == 0) {

25 fprintf(stderr, "Failed to create transformation object.\n");

26 return 1;

27 }

28 proj_ellipsoid_get_parameters(C, proj_get_ellipsoid(C, P),

29 &a, 0, 0, &invf);

30 proj_destroy(P);

31 proj_context_destroy(C);

32 }

33

34 geod_init(&g, a, invf != 0 ? 1/invf : 0);

35

38 printf("latitude longitude azimuth\n");

39 for (i = 0; i <= n; ++i) {

40

42 i * l.a13 / n, lat + i, lon + i, azi + i, 0, 0, 0, 0, 0);

43 printf("%.5f %.5f %.5f\n", lat[i], lon[i], azi[i]);

44 }

45 return 0;

46 }

API for the geodesic routines in C.

void GEOD_DLL geod_init(struct geod_geodesic *g, double a, double f)

double GEOD_DLL geod_genposition(const struct geod_geodesicline *l, unsigned flags, double s12_a12, double *plat2, double *plon2, double *pazi2, double *ps12, double *pm12, double *pM12, double *pM21, double *pS12)

void GEOD_DLL geod_inverseline(struct geod_geodesicline *l, const struct geod_geodesic *g, double lat1, double lon1, double lat2, double lon2, unsigned caps)