~ubuntu-branches/ubuntu/vivid/proj/vivid

« back to all changes in this revision

Viewing changes to src/geod_set.c

  • Committer: Bazaar Package Importer
  • Author(s): Peter S Galbraith
  • Date: 2002-01-11 10:27:12 UTC
  • Revision ID: james.westby@ubuntu.com-20020111102712-ayi18r8y2eesv0y9
Tags: upstream-4.4.5
ImportĀ upstreamĀ versionĀ 4.4.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef lint
 
2
static const char SCCSID[]="@(#)geod_set.c      4.8     95/09/23        GIE     REL";
 
3
#endif
 
4
#include "projects.h"
 
5
#include "geodesic.h"
 
6
        void
 
7
geod_set(int argc, char **argv) {
 
8
        paralist *start = 0, *curr;
 
9
        double es;
 
10
        char *name;
 
11
        int i;
 
12
 
 
13
    /* put arguments into internal linked list */
 
14
        if (argc <= 0)
 
15
                emess(1, "no arguments in initialization list");
 
16
        for (i = 0; i < argc; ++i)
 
17
                if (i)
 
18
                        curr = curr->next = pj_mkparam(argv[i]);
 
19
                else
 
20
                        start = curr = pj_mkparam(argv[i]);
 
21
        /* set elliptical parameters */
 
22
        if (pj_ell_set(start, &a, &es)) emess(1,"ellipse setup failure");
 
23
        /* set units */
 
24
        if (name = pj_param(start, "sunits").s) {
 
25
                char *s;
 
26
 
 
27
                for (i = 0; (s = pj_units[i].id) && strcmp(name, s) ; ++i) ;
 
28
                if (!s)
 
29
                        emess(1,"%s unknown unit conversion id", name);
 
30
                fr_meter = 1. / (to_meter = atof(pj_units[i].to_meter));
 
31
        } else
 
32
                to_meter = fr_meter = 1.;
 
33
        if (ellipse = es != 0.) {
 
34
                onef = sqrt(1. - es);
 
35
                f = 1 - onef;
 
36
                f2 = f/2;
 
37
                f4 = f/4;
 
38
                f64 = f*f/64;
 
39
        } else {
 
40
                onef = 1.;
 
41
                f = f2 = f4 = f64 = 0.;
 
42
        }
 
43
        /* check if line or arc mode */
 
44
        if (pj_param(start, "tlat_1").i) {
 
45
                double del_S;
 
46
#undef f
 
47
                phi1 = pj_param(start, "rlat_1").f;
 
48
                lam1 = pj_param(start, "rlon_1").f;
 
49
                if (pj_param(start, "tlat_2").i) {
 
50
                        phi2 = pj_param(start, "rlat_2").f;
 
51
                        lam2 = pj_param(start, "rlon_2").f;
 
52
                        geod_inv();
 
53
                        geod_pre();
 
54
                } else if (S = pj_param(start, "dS").f) {
 
55
                        al12 = pj_param(start, "rA").f;
 
56
                        geod_pre();
 
57
                        geod_for();
 
58
                } else emess(1,"incomplete geodesic/arc info");
 
59
                if ((n_alpha = pj_param(start, "in_A").i) > 0) {
 
60
                        if (!(del_alpha = pj_param(start, "rdel_A").f))
 
61
                                emess(1,"del azimuth == 0");
 
62
                } else if (del_S = fabs(pj_param(start, "ddel_S").f)) {
 
63
                        n_S = S / del_S + .5;
 
64
                } else if ((n_S = pj_param(start, "in_S").i) <= 0)
 
65
                        emess(1,"no interval divisor selected");
 
66
        }
 
67
        /* free up linked list */
 
68
        for ( ; start; start = curr) {
 
69
                curr = start->next;
 
70
                pj_dalloc(start);
 
71
        }
 
72
}