#include "get_area_mbr.h" NV_BOOL get_area_mbr (NV_CHAR *path, NV_INT32 *polygon_count, NV_FLOAT64 *polygon_x, NV_FLOAT64 *polygon_y, NV_F64_XYMBR *mbr) { NV_CHAR string[256], tmp[256], lat_hemi, lon_hemi; FILE *area_fp; NV_INT32 i, lat_deg, lat_min, lon_deg, lon_min; NV_FLOAT32 lat_sec, lon_sec; if ((area_fp = fopen (path, "r")) == NULL) { perror (path); return (NVFalse); } *polygon_count = 0; /* ISS-60 format area file. */ if (!strcmp (&path[strlen (path) - 4], ".ARE")) { while (fgets (string, sizeof (string), area_fp) != NULL) { if (!strncmp (string, "POINT=", 6)) { strtok (string, ";"); strcpy (tmp, strtok (NULL, ";")); posfix (tmp, &polygon_y[*polygon_count], "lat"); strcpy (tmp, strtok (NULL, ";")); posfix (tmp, &polygon_x[*polygon_count], "lon"); (*polygon_count)++; } } } /* Polygon list format area file. */ else { while (fget_coord (area_fp, &lat_hemi, &lat_deg, &lat_min, &lat_sec, &lon_hemi, &lon_deg, &lon_min, &lon_sec)) { polygon_y[*polygon_count] = (NV_FLOAT64) lat_deg + (NV_FLOAT64) lat_min / 60.0 + (NV_FLOAT64) lat_sec / 3600.0; if (lat_hemi == 'S') polygon_y[*polygon_count] = -polygon_y[*polygon_count]; polygon_x[*polygon_count] = (NV_FLOAT64) lon_deg + (NV_FLOAT64) lon_min / 60.0 + (NV_FLOAT64) lon_sec / 3600.0; if (lon_hemi == 'W') polygon_x[*polygon_count] = -polygon_x[*polygon_count]; (*polygon_count)++; } } fclose (area_fp); mbr->min_y = 91.0; mbr->min_x = 181.0; mbr->max_y = -91.0; mbr->max_x = -181.0; for (i = 0 ; i < *polygon_count ; i++) { if (polygon_y[i] < mbr->min_y) mbr->min_y = polygon_y[i]; if (polygon_y[i] > mbr->max_y) mbr->max_y = polygon_y[i]; if (polygon_x[i] < mbr->min_x) mbr->min_x = polygon_x[i]; if (polygon_x[i] > mbr->max_x) mbr->max_x = polygon_x[i]; } return (NVTrue); }