great.gms : Great Circle Distances

Description

The coordinates of points (airports) on the globe are given in degrees
latitude and longitude. The shortest distance (great circle distance)
between pairs of points is desired. First, the spheric coordinates are
translated into Cartesian coordinates. Second, the straight line
distance between points on the unit sphere are calculated. Third,
the great circle distances are computed.


Small Model of Type : GAMS


Category : GAMS Model library


Main file : great.gms

$title Great Circle Distances (GREAT,SEQ=73)

$onText
The coordinates of points (airports) on the globe are given in degrees
latitude and longitude. The shortest distance (great circle distance)
between pairs of points is desired. First, the spheric coordinates are
translated into Cartesian coordinates. Second, the straight line
distance between points on the unit sphere are calculated. Third,
the great circle distances are computed.


Brooke, A, Kendrick, D, and Meeraus, A, GAMS: A User's Guide. The
Scientific Press, Redwood City, California, 1988.

The center of the earth is the origin for all coordinate systems.

Spheric coordinates   latitude angle  north  positive
                                      south  negative
                      longitude angle east   positive
                                      west   negative

Cartesian coordinates x-axis   0 N   0 E
                      y-axis   0 N  90 E
                      z-axis  90 N

Keywords: great circle distance, orthodromic distance, distance measuring, mathematics
$offText

Set
   k 'coordinates' / x-axis, y-axis, z-axis   /
   a 'airports'    / sfo 'San Francisco'
                     mia 'Miami'
                     jfk 'New York'
                     iah 'Houston'
                     iad 'Washington DC'
                     khi 'Karachi - Pakistan'
                     nnn 'North Pole'
                     sss 'South Pole'         /;

Alias (a,ap);

Table  loc(a,*) 'location on map'
          lat-deg  lat-min  long-deg  long-min
   sfo         37       37      -122       -23
   mia         25       48      - 80       -17
   jfk         40       38      - 73       -47
   iah         29       58      - 95       -20
   iad         38       57      - 77       -25
   khi         24       40        67        10
   nnn         90
   sss        -90                             ;

Scalar r 'radius of earth (miles)' / 3959 /;

Parameter
   lat(a)     'latitude angle                            (radians)'
   long(a)    'longitude angle                           (radians)'
   uk(a,k)    'point in cartesian coordinates        (unit sphere)'
   useg(a,ap) 'straight line distance between points (unit sphere)'
   udis(a,ap) 'great circle distances                (unit sphere)'
   dis(a,ap)  'great circle distances                      (miles)';

lat (a) = (loc(a,"lat-deg")  + loc(a,"lat-min") /60)*pi/180;
long(a) = (loc(a,"long-deg") + loc(a,"long-min")/60)*pi/180;

uk(a,"x-axis") = cos(long(a))*cos(lat(a));
uk(a,"y-axis") = sin(long(a))*cos(lat(a));
uk(a,"z-axis") =              sin(lat(a));

useg(a,ap) = sqrt(sum(k, sqr(uk(a,k) - uk(ap,k)) ));
udis(a,ap) = pi;
udis(a,ap)$(useg(a,ap) < 1.99999) = 2*arctan(useg(a,ap)/2/sqrt(1 - sqr(useg(a,ap)/2)));
dis(a,ap)  = r*udis(a,ap);

option  lat:5, long:5, uk:5, useg:5, udis:5, dis:0;

display loc, lat, long, uk, useg, udis, dis;