00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include <grass/gis.h>
00036 #include <string.h>
00037
00038 static int format(char *, int, int, double, char);
00039 static int ll_parts(double, int *, int *, double *);
00040
00041 int G_lat_format(double lat, char *buf)
00042 {
00043 int d, m;
00044 char h;
00045 double s;
00046
00047 G_lat_parts(lat, &d, &m, &s, &h);
00048 format(buf, d, m, s, h);
00049
00050 return 0;
00051 }
00052
00053 char *G_lat_format_string(void)
00054 {
00055 return "dd:mm:ss{N|S}";
00056 }
00057
00058 int G_lon_format(double lon, char *buf)
00059 {
00060 int d, m;
00061 char h;
00062 double s;
00063
00064 G_lon_parts(lon, &d, &m, &s, &h);
00065 format(buf, d, m, s, h);
00066
00067 return 0;
00068 }
00069 char *G_lon_format_string(void)
00070 {
00071 return "ddd:mm:ss{E|W}";
00072 }
00073
00074 int G_llres_format(double res, char *buf)
00075 {
00076 int d, m;
00077 char h;
00078 double s;
00079
00080 G_lat_parts(res, &d, &m, &s, &h);
00081 h = 0;
00082 format(buf, d, m, s, h);
00083
00084 return 0;
00085 }
00086 char *G_llres_format_string(void)
00087 {
00088 return "dd:mm:ss";
00089 }
00090
00091
00092 static int format(char *buf, int d, int m, double s, char h)
00093 {
00094 char temp[50];
00095 double ss;
00096
00097 sprintf(temp, "%f", s);
00098 sscanf(temp, "%lf", &ss);
00099 if (ss >= 60) {
00100 ss = 0;
00101 if (++m >= 60) {
00102 m = 0;
00103 d++;
00104 }
00105 }
00106
00107 if (ss < 10.0)
00108 sprintf(temp, "0%f", ss);
00109 else
00110 sprintf(temp, "%f", ss);
00111 G_trim_decimal(temp);
00112 if (strcmp(temp, "00") != 0 && strcmp(temp, "0") != 0)
00113 sprintf(buf, "%d:%02d:%s%c", d, m, temp, h);
00114 else if (m > 0)
00115 sprintf(buf, "%d:%02d%c", d, m, h);
00116 else if (d > 0)
00117 sprintf(buf, "%d%c", d, h);
00118 else
00119 sprintf(buf, "0");
00120
00121 return 0;
00122 }
00123
00124 int G_lat_parts(double lat,
00125 int *d, int *m,
00126 double *s,
00127 char *h
00128 )
00129 {
00130 if (lat < 0) {
00131 *h = 'S';
00132 lat = -lat;
00133 }
00134 else
00135 *h = 'N';
00136
00137 ll_parts(lat, d, m, s);
00138
00139 return 0;
00140 }
00141
00142 int G_lon_parts(double lon,
00143 int *d, int *m,
00144 double *s,
00145 char *h
00146 )
00147 {
00148 while (lon > 180.0)
00149 lon -= 360.0;
00150 while (lon < -180.0)
00151 lon += 360.0;
00152
00153 if (lon < 0) {
00154 *h = 'W';
00155 lon = -lon;
00156 }
00157 else
00158 *h = 'E';
00159
00160 ll_parts(lon, d, m, s);
00161
00162 return 0;
00163 }
00164
00165 static int ll_parts(double ll,
00166 int *d, int *m,
00167 double *s)
00168 {
00169 if (ll == 0.0) {
00170 *d = 0;
00171 *m = 0;
00172 *s = 0.0;
00173 }
00174 else {
00175 *d = ll;
00176 *m = (ll - *d) * 60;
00177 if (*m < 0)
00178 *m = 0;
00179 *s = ((ll - *d) * 60 - *m) * 60;
00180 if (*s < 0)
00181 *s = 0;
00182 }
00183
00184 return 0;
00185 }