108 using namespace MSP::CCS;
134 const double PI = 3.14159265358979323e0;
163 temp_char = toupper(GEOREFString[i]);
165 if ((!isalpha(GEOREFString[i]))
169 if ((i == 0) || (i == 2))
174 letter_number[i] = temp_char;
179 letter_number[i] -= 2;
180 else if (letter_number[i] >
LETTER_I)
181 letter_number[i] -= 1;
183 if ((letter_number[0] > 23) || (letter_number[2] > 14))
185 if ((letter_number[1] > 11) || (letter_number[3] > 14))
188 *latitude = (double)(letter_number[1]) *
QUAD + (double)(letter_number[3]);
189 *longitude = (double)(letter_number[0]) *
QUAD + (double)(letter_number[2]);
193 void extractMinutes(
char *GEOREFString,
long start,
long length,
long errorType,
double *minutes )
210 for (i=0;i<length;i++)
212 if (isdigit(GEOREFString[start+i]))
213 temp_str[i] = GEOREFString[start+i];
222 temp_str[length] = 0;
223 *minutes = (double)atof(temp_str);
226 *minutes = *minutes / 10;
240 double fraction = modf (value, &ivalue);
242 ival = (long)(ivalue);
243 if ((fraction > 0.5) || ((fraction == 0.5) && (ival%2 == 1)))
262 divisor = pow (10.0, (5.0 - precision));
265 minutes = minutes * 1000;
267 sprintf (str,
"%*.*ld", precision, precision, min);
336 char GEOREFString[21];
353 origin_long = (double)LONGITUDE_LOW;
354 origin_lat = (double)LATITUDE_LOW;
355 letter_number[0] = (long)((longitude-origin_long) /
QUAD +
ROUND_ERROR);
356 longitude = longitude - ((double)letter_number[0] *
QUAD + origin_long);
357 letter_number[2] = (long)(longitude +
ROUND_ERROR);
358 long_min = (longitude - (double)letter_number[2]) * (double)
MIN_PER_DEG;
359 letter_number[1] = (long)((latitude - origin_lat) /
QUAD +
ROUND_ERROR);
360 latitude = latitude - ((double)letter_number[1] *
QUAD + origin_lat);
362 lat_min = (latitude - (double)letter_number[3]) * (double)
MIN_PER_DEG;
363 for (i = 0;i < 4; i++)
366 letter_number[i] += 1;
368 letter_number[i] += 1;
371 if (letter_number[0] == 26)
377 if (letter_number[1] == 13)
389 strcat(GEOREFString,long_min_str);
390 strcat(GEOREFString,lat_min_str);
415 double longitude, latitude;
422 georef_length = strlen(GEOREFString);
424 || ((georef_length % 2) != 0))
429 minutes_length = (georef_length - start) / 2;
437 latitude = latitude + origin_lat + lat_minutes / (double)
MIN_PER_DEG;
438 longitude = longitude + origin_long + long_minutes / (double)
MIN_PER_DEG;