[Proj] Revised DMS output formatter

Gerald I. Evenden gerald.evenden at verizon.net
Sun Jun 4 12:24:07 PDT 2006


Because the old DMS output routine was somewhat limited in capability and
was *not* thread proof, a new output format procedure is available that
will replace the old one in future lproj releases.

The prototype is:

int proj_rad2dms(char *field, size_t n, const char *format, double val,
    const char *sign)

where:
	'field' is a character array to hold the formated string of 'val'
        'n' is the size of 'field'
        'format' is the C format string
        'val' is the double precision radian value to be formated
	'sign' is a two character string for suffix sign where 'sign[0]' is
		used for positive sign of 'val' and 'sign[1]' is used for
		negative 'val'.  A %c specification in format designates
		that the suffix form is to be used, otherwise normal '-' prefix
		sign will be used.

The procedure is thread proof and requires C99 level compiler/libraries.

The following is the output of a test procedure that demonstrates the
usage of 'proj_rad2dms:

classic lproj DMS output format
test format:[%dd%d'%.3f"] sign[]

     input:  33 3 7
return:  11: <33d3'7.000">
     input:  -3 7 45.555555
return:  11: <-3d7'45.556">
     input:  0 0 77.3333333
return:  11: <0d1'17.333">
     input:  0 0 -22.5
return:  11: <-0d0'22.500">
------------------------
Classic DMS output with sign suffix
test format:[%d°%02d'%07.4f"%c] sign[NS]

     input:  33 3 7
return:  16: <33°03'07.0000"N>
     input:  -3 7 45.555555
return:  15: <3°07'45.5556"S>
     input:  0 0 77.3333333
return:  15: <0°01'17.3333"N>
     input:  0 0 -22.5
return:  15: <0°00'22.5000"S>
------------------------
DM output with suffix
test format:[%d°%07.4f'%c] sign[EW]

     input:  33 3 7
return:  13: <33°03.1167'E>
     input:  -3 7 45.555555
return:  12: <3°07.7593'W>
     input:  0 0 77.3333333
return:  12: <0°01.2889'E>
     input:  0 0 -22.5
return:  12: <0°00.3750'W>
------------------------
GRASS style (at least in the old days(?))
test format:[%d:%d:%7.4f] sign[EW]

     input:  33 3 7
return:  12: <33:3: 7.0000>
     input:  -3 7 45.555555
return:  11: <-3:7:45.5556>
     input:  0 0 77.3333333
return:  11: <0:1:17.3333>
     input:  0 0 -22.5
return:  11: <-0:0:22.5000>
------------------------
simple degree output
test format:[%g] sign[]

     input:  33 3 7
return:   7: <33.0519>
     input:  -3 7 45.555555
return:   8: <-3.12932>
     input:  0 0 77.3333333
return:   9: <0.0214815>
     input:  0 0 -22.5
return:   8: <-0.00625>

For anyone wanting a copy of the procedure for testing or application
in an existing application, I will be glad to email a tgz file containing:
proj_rad2dms.c, test.c, rad2dms.h, Makefile, and test1 script.
-- 
Jerry and the low-riders: Daisy Mae and Joshua
"Cogito cogito ergo cogito sum"
   Ambrose Bierce, The Devil's Dictionary




More information about the Proj mailing list