home *** CD-ROM | disk | FTP | other *** search
/ GRIPS 2: Government Rast…rocessing Software & Data / GRIPS_2.cdr / dos / adrg / source / ddtodms.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-06-16  |  1.4 KB  |  54 lines

  1.  
  2. procedure ddtodms(dd: real; var deg, min : longint ;var sec :real);
  3. { convert an angle expressed in decimal degrees (dd.dddd)  to
  4.   degrees, minutes and seconds (ddd mm ss.ss).
  5.   The sign will be at the leftmost non zero value.
  6.   Juan A. Perez, USA ETL, Ft. Belvoir, VA 22060-5546
  7.   6-13-89 corrected problem with negative angles - with help from
  8.   Dr. Justin Simpson }
  9. var
  10.   ddtemp, degtemp, mintemp : real;
  11. begin
  12.   ddtemp := abs(dd);            { save the sign of dd }
  13.   deg := trunc( ddtemp );
  14.   degtemp := ddtemp - deg;
  15.   min := trunc (degtemp * 60) ;
  16.   mintemp := degtemp * 60 - min;
  17.   sec := mintemp * 60.00;
  18.  
  19.   { assign the sign to the leftmost non zero value }
  20.   if (dd < 0.000000) then
  21.   begin
  22.      if (deg = 0) then
  23.      begin
  24.         if (min = 0) then
  25.            sec := - sec
  26.         else
  27.            min := - min
  28.      end
  29.      else
  30.         deg := -deg
  31.   end;
  32.  
  33. { take care of the round-up errors and fix any 60 minutes or seconds cases}
  34. { may want to change to 59.99 for general use but for ADRG keep it 59.8}
  35.   if (abs(sec) >= 59.8) then
  36.   begin
  37.      sec := 0.00;
  38.      if (min < 0 ) then      { if negative }
  39.         min := min - 1
  40.      else
  41.         min := min + 1
  42.   end;
  43.  
  44.   if ( abs(min) >= 60 ) then
  45.   begin
  46.      min := min-60;
  47.      if (dd < 0.000000) then       { if negative }
  48.         deg := deg - 1
  49.      else
  50.         deg := deg + 1
  51.   end;
  52.  
  53. end;
  54.