Prechádzať zdrojové kódy

Jorge Tizado: better management of metadata file

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@54846 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Neteler 12 rokov pred
rodič
commit
ba6cfa9306

+ 1 - 1
imagery/i.landsat.toar/i.landsat.toar.html

@@ -15,7 +15,7 @@ needed the gain (high or low) of the nine respective bands.
 Optionally (recommended), the data can be read from metadata file (.met or MTL.txt) for all
 Landsat MSS, TM and ETM+. However, if the solar elevation or the
 product creation date are given the values of the metadata file are
-overwriten (only with .met files). This is necessary when the data in the .met file is
+overwriten. This is necessary when the data in the .met file is
 incorrect or not accurate.
 
 <p>

+ 2 - 2
imagery/i.landsat.toar/landsat.h

@@ -21,7 +21,7 @@
  * Esun in  W / (m^2 * µm)               -> Irradiance
  ****************************************************/
 
-#define MAX_BANDS   9
+#define MAX_BANDS   11
 
 typedef struct
 {
@@ -51,7 +51,7 @@ typedef struct
     double dist_es;		/* Distance Earth-Sun            */
     double sun_elev;		/* Solar elevation               */
 
-    char sensor[5];		/* Type of sensor: MSS, TM, ETM+ */
+    char sensor[10];		/* Type of sensor: MSS, TM, ETM+, OLI/TIRS */
     int bands;			/* Total number of bands         */
     band_data band[MAX_BANDS];	/* Data for each band            */
 } lsat_data;

+ 112 - 164
imagery/i.landsat.toar/landsat_met.c

@@ -16,175 +16,110 @@
 
 inline void chrncpy(char *dest, char src[], int n)
 {
-    if (src == NULL)
-    {
-        dest[0] = '\0';
-    }
-    else
-    {
-        int i;
-        for (i = 0; i < n && src[i] != '\0' && src[i] != '\"'; i++) dest[i] = src[i];
-        dest[i] = '\0';
-    }
+    int i;
+    for( i = 0 ; i < n && src[i] != '\0' && src[i] != '\"'; i++) dest[i] = src[i];
+    dest[i] = '\0';
 }
 
-
-/****************************************************************************
- * PURPOSE:     Read values of Landsat MSS/TM from header (.met) file
- *****************************************************************************/
-void get_metdata(const char mettext[], char *text, char value[])
+void get_oldformat( const char metadata[], char * key, char value[] )
 {
-    char *ptr;
-
-
-
-    ptr = strstr(mettext, text);
-    if (ptr == NULL)
+    int i = 0;
+    char * ptr = strstr(metadata, key);
+    if (ptr != NULL)
     {
-        value[0] = 0;
-        return;
+        ptr = strstr(ptr, " VALUE ");
+        if (ptr != NULL)
+        {
+            while (*ptr++ != '=') ;
+            while (*ptr <= ' ' || *ptr == '\"') *ptr++;
+            while (i < MAX_STR && *ptr != '\"' && *ptr >= ' ') value[i++] = *ptr++;
+        }
     }
-
-    ptr = strstr(ptr, " VALUE ");
-    if (ptr == NULL) return;
-
-    while (*ptr++ != '\"') ;
-    int i = 0;
-    while (*ptr != '\"' && i < MAX_STR) value[i++] = *ptr++;
     value[i] = '\0';
-
-    return;
 }
 
-void lsat_metdata(char *metfile, lsat_data * lsat)
+void get_newformat( const char metadata[], char * key, char value[] )
 {
-    FILE *f;
-    char mettext[TM5_MET_SIZE];
-    char name[MAX_STR], value[MAX_STR];
-
-    /* char metdate[MAX_STR]; */
-
-    if ((f = fopen(metfile, "r")) == NULL)
-    G_fatal_error(_("Metadata file <%s> not found"), metfile);
-
-    fread(mettext, TM5_MET_SIZE, 1, f);
-
-    /* --------------------------------------- */
-    get_metdata(mettext, "PLATFORMSHORTNAME", value);
-    chrncpy(name, value + 8, 1);
-    lsat->number = atoi(name);
-
-    get_metdata(mettext, "SENSORSHORTNAME", value);
-    chrncpy(lsat->sensor, value + 1, 4);
-
-    get_metdata(mettext, "CALENDARDATE", value);
-    chrncpy(lsat->date, value, 10);
-
-    if (lsat->creation[0] == 0)
-    {
-        get_metdata(mettext, "PRODUCTIONDATETIME", value);
-        if (!value[0])
-            G_fatal_error(_("Product creation date not in metadata file <%s>, input this data in the command line parameters"), metfile);
-        chrncpy(lsat->creation, value, 10);
-    }
-
-    if (lsat->sun_elev == 0)
+    int i = 0;
+    char * ptr = strstr(metadata, key);
+    if (ptr != NULL)
     {
-        get_metdata(mettext, "SolarElevation", value);
-        if (!value[0])
-           G_fatal_error(_("Unable to read solar elevation from metadata file in metadata file <%s>, input this data in the command line parameters"), metfile);
-        lsat->sun_elev = atof(value);
+        while (*ptr++ != '=') ;
+        while (*ptr <= ' ' || *ptr == '\"') *ptr++;
+        while (i < MAX_STR && *ptr != '\"' && *ptr > ' ') value[i++] = *ptr++;
     }
-
-    /* Fill data with the sensor_XXX functions */
-    switch(lsat->number)
-    {
-        case 1:
-            set_MSS1(lsat);
-            break;
-        case 2:
-            set_MSS2(lsat);
-            break;
-        case 3:
-            set_MSS3(lsat);
-            break;
-        case 4:
-            if (lsat->sensor[0] == 'M')
-                set_MSS4(lsat);
-            else
-                set_TM4(lsat);
-            break;
-        case 5:
-            if (lsat->sensor[0] == 'M')
-                set_MSS5(lsat);
-            else
-                set_TM5(lsat);
-            break;
-        default:
-            G_warning("Unable to recognize satellite platform [%d]", lsat->number);
-            break;
-    }
-
-    /* --------------------------------------- */
-    (void)fclose(f);
-    return;
+    value[i] = '\0';
 }
 
 
 /****************************************************************************
- * PURPOSE:     Read values of Landsat from MTL metadata (MTL.txt) file
+ * PURPOSE:     Read parameters from Landsat metadata files
  *****************************************************************************/
 
-void get_mtldata(const char mtltext[], char *text, char value[])
-{
-    char *ptr;
-
-    ptr = strstr(mtltext, text);
-    if (ptr == NULL)
-    {
-        value[0] = '\0';
-        return;
-    }
-
-    while (*ptr++ != '=') ;
-    while (*ptr <= ' ' || *ptr == '\"') *ptr++;
-    int i = 0;
-    while (i < MAX_STR && *ptr != '\"' && *ptr > ' ') value[i++] = *ptr++;
-    value[i] = '\0';
-
-    return;
-}
-
-void lsat_mtldata(char *mtlfile, lsat_data * lsat)
+void lsat_metadata( char * metafile, lsat_data * lsat)
 {
     FILE *f;
     char mtldata[METADATA_SIZE];
-    char name[MAX_STR], value[MAX_STR];
-    int i;
-
-    if ((f = fopen(mtlfile, "r")) == NULL)
-       G_fatal_error(_("Metadata file <%s> not found"), mtlfile);
-
-    fread(mtldata, METADATA_SIZE, 1, f);
-
-    /* --------------------------------------- */
+    char key[MAX_STR], value[MAX_STR];
+    void (*get_mtldata)( const char [], char *, char [] );
+    int i, j, version;
+
+    if ((f = fopen(metafile, "r")) == NULL)
+       G_fatal_error(_("Metadata file <%s> not found"), metafile);
+
+    i = fread(mtldata, METADATA_SIZE, 1, f);
+    get_mtldata = (strstr(mtldata, " VALUE ") != NULL) ? get_oldformat : get_newformat;
+    version = (strstr(mtldata, "QCALMAX_BAND") != NULL) ? 0 : 1;
+    
+    /* Fill with product metadata */
     get_mtldata(mtldata, "SPACECRAFT_ID", value);
-    chrncpy(name, value + 7, 1);
-    lsat->number = atoi(name);
+    if( value[0] == '\0' )
+    {
+        get_mtldata(mtldata, "PLATFORMSHORTNAME", value);
+    }
+    
+    i = 0; while( value[i] && (value[i] < '0' || value[i] > '9') ) i++;
+    lsat->number = atoi(value + i);
 
     get_mtldata(mtldata, "SENSOR_ID", value);
-    chrncpy(lsat->sensor, value, 4);
+    if( value[0] == '\0' )
+    {
+        get_mtldata(mtldata, "SENSORSHORTNAME", value);
+    }
+    chrncpy(lsat->sensor, value, 8);
 
-    get_mtldata(mtldata, "ACQUISITION_DATE", value);
+    get_mtldata(mtldata, "DATE_ACQUIRED", value);
+    if( value[0] == '\0' )
+    {
+        get_mtldata(mtldata, "ACQUISITION_DATE", value);
+        if( value[0] == '\0' )
+        {
+            get_mtldata(mtldata, "CALENDARDATE", value);
+        }
+    }
     chrncpy(lsat->date, value, 10);
 
-    get_mtldata(mtldata, "CREATION_TIME", value);
+    get_mtldata(mtldata, "FILE_DATE", value);
+    if( value[0] == '\0' )
+    {
+        get_mtldata(mtldata, "CREATION_TIME", value);
+        if( value[0] == '\0' )
+        {
+            get_mtldata(mtldata, "PRODUCTIONDATETIME", value);
+        }
+    }
     chrncpy(lsat->creation, value, 10);
 
     get_mtldata(mtldata, "SUN_ELEVATION", value);
+    if( value[0] == '\0' )
+    {
+        get_mtldata(mtldata, "SolarElevation", value);
+    }
     lsat->sun_elev = atof(value);
+    if( lsat->sun_elev == 0. )
+        G_warning("Sun elevation is %f", lsat->sun_elev);
 
-    /* Fill data with the sensor_XXX functions */
+    /* Fill data with the basic sensor parameters */
     switch(lsat->number)
     {
         case 1:
@@ -209,41 +144,54 @@ void lsat_mtldata(char *mtlfile, lsat_data * lsat)
                 set_TM5(lsat);
             break;
         case 7:
-            get_mtldata(mtldata, "BAND1_GAIN",  value);
-            get_mtldata(mtldata, "BAND2_GAIN",  value + 1);
-            get_mtldata(mtldata, "BAND3_GAIN",  value + 2);
-            get_mtldata(mtldata, "BAND4_GAIN",  value + 3);
-            get_mtldata(mtldata, "BAND5_GAIN",  value + 4);
-            get_mtldata(mtldata, "BAND6_GAIN1", value + 5);
-            get_mtldata(mtldata, "BAND6_GAIN2", value + 6);
-            get_mtldata(mtldata, "BAND7_GAIN",  value + 7);
-            get_mtldata(mtldata, "BAND8_GAIN",  value + 8);
-            value[9] = '\0';
+        {
+            char * fmt_gain[] = { "BAND%d_GAIN%d ", " GAIN_BAND_%d_VCID_%d" };
+            for( i = 1, j = 0; i < 9; i++ )
+            {
+                sprintf(key, fmt_gain[version], i, 1);
+                if (i != 6) key[version == 0 ? 10 : 12] = '\0';
+                get_mtldata(mtldata, key,  value + j++);
+                if (i == 6)
+                {
+                    sprintf(key, fmt_gain[version], i, 2);
+                    get_mtldata(mtldata, key,  value + j++);
+                }
+            }
+            value[j] = '\0';
+            G_debug(1, "ETM+ gain = [%s]", value);
             set_ETM(lsat, value);
             break;
+        }
         default:
             G_warning("Unable to recognize satellite platform [%d]", lsat->number);
             break;
     }
 
-    /* Update the information from metadata file */
-    for (i = 0; i < lsat->bands; i++) {
-        snprintf(name, MAX_STR, "LMAX_BAND%d", lsat->band[i].code);
-        get_mtldata(mtldata, name, value);
-        lsat->band[i].lmax = atof(value);
-        snprintf(name, MAX_STR, "LMIN_BAND%d", lsat->band[i].code);
-        get_mtldata(mtldata, name, value);
-        lsat->band[i].lmin = atof(value);
-        snprintf(name, MAX_STR, "QCALMAX_BAND%d", lsat->band[i].code);
-        get_mtldata(mtldata, name, value);
-        lsat->band[i].qcalmax = atof(value);
-        snprintf(name, MAX_STR, "QCALMIN_BAND%d", lsat->band[i].code);
-        get_mtldata(mtldata, name, value);
-        lsat->band[i].qcalmin = atof(value);
+    /* Update the information from metadata file, if infile */
+//     if( format == NEW_FORMAT )
+    if( get_mtldata == get_newformat )
+    {
+        char * fmt_lmax[]     = { "LMAX_BAND%d",    "RADIANCE_MAXIMUM_BAND_%d" };
+        char * fmt_lmin[]     = { "LMIN_BAND%d",    "RADIANCE_MINIMUM_BAND_%d" };
+        char * fmt_qcalmax[]  = { "QCALMAX_BAND%d", "QUANTIZE_CAL_MAX_BAND_%d" };
+        char * fmt_qcalmin[]  = { "QCALMIN_BAND%d", "QUANTIZE_CAL_MIN_BAND_%d" };
+
+        for (i = 0; i < lsat->bands; i++) {
+            sprintf(key, fmt_lmax[version], lsat->band[i].code);
+            get_mtldata(mtldata, key, value);
+            lsat->band[i].lmax = atof(value);
+            sprintf(key, fmt_lmin[version], lsat->band[i].code);
+            get_mtldata(mtldata, key, value);
+            lsat->band[i].lmin = atof(value);
+            sprintf(key, fmt_qcalmax[version], lsat->band[i].code);
+            get_mtldata(mtldata, key, value);
+            lsat->band[i].qcalmax = atof(value);
+            sprintf(key, fmt_qcalmin[version], lsat->band[i].code);
+            get_mtldata(mtldata, key, value);
+            lsat->band[i].qcalmin = atof(value);
+        }
     }
-    /* --------------------------------------- */
 
     (void)fclose(f);
     return;
 }
-

+ 84 - 8
imagery/i.landsat.toar/landsat_set.c

@@ -16,9 +16,9 @@ void sensor_MSS(lsat_data * lsat)
     /* green, red, near infrared, near infrared */
     int band[] = { 1, 2, 3, 4 };
     int code[] = { 4, 5, 6, 7 };
-    double wmax[] = { 0.6, 0.7, 0.8, 1.1 };
     double wmin[] = { 0.5, 0.6, 0.7, 0.8 };
-    /* 68x83, 68x83, 68x83, 68x83 */
+    double wmax[] = { 0.6, 0.7, 0.8, 1.1 };
+    /* original: 79x57, now all 60 */
 
     strcpy(lsat->sensor, "MSS");
 
@@ -41,9 +41,9 @@ void sensor_TM(lsat_data * lsat)
 
     /* blue, green red, near infrared, shortwave IR, thermal IR, shortwave IR */
     int band[] = { 1, 2, 3, 4, 5, 6, 7 };
-    double wmax[] = { 0.52, 0.60, 0.69, 0.90, 1.75, 12.50, 2.35 };
     double wmin[] = { 0.45, 0.52, 0.63, 0.76, 1.55, 10.40, 2.08 };
-    /* 30, 30, 30, 30, 30, 120, 30 */
+    double wmax[] = { 0.52, 0.60, 0.69, 0.90, 1.75, 12.50, 2.35 };
+    /* 30, 30, 30, 30, 30, 120 original, 60 resamples before Feb 25, 2010 and 30 after, 30 */
 
     if (!lsat->sensor)
       strcpy(lsat->sensor, "TM");
@@ -68,9 +68,9 @@ void sensor_ETM(lsat_data * lsat)
     /* blue, green red, near infrared, shortwave IR, thermal IR, shortwave IR, panchromatic */
     int band[] = { 1, 2, 3, 4, 5, 6, 6, 7, 8 };
     int code[] = { 1, 2, 3, 4, 5, 61, 62, 7, 8 };
-    double wmax[] = { 0.515, 0.605, 0.690, 0.90, 1.75, 12.50, 2.35, 0.90 };
     double wmin[] = { 0.450, 0.525, 0.630, 0.75, 1.55, 10.40, 2.09, 0.52 };
-    /* 30, 30, 30, 30, 30, 60, 30, 15 */
+    double wmax[] = { 0.515, 0.605, 0.690, 0.90, 1.75, 12.50, 2.35, 0.90 };
+    /* 30, 30, 30, 30, 30, 60 (after Feb. 25, 2010: 30), 30, 15 */
 
     strcpy(lsat->sensor, "ETM+");
 
@@ -87,6 +87,32 @@ void sensor_ETM(lsat_data * lsat)
     return;
 }
 
+void sensor_OLI(lsat_data * lsat)
+{
+    int i;
+
+    /* coastal aerosol, blue, green, red, near infrared, shortwave IR (SWIR) 1, SWIR 2, panchromatic,
+     * cirrus, thermal infrared (TIR) 1, TIR 2 */
+    int band[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
+    int code[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
+    double wmin[] = { 0.433, 0.450, 0.525, 0.630, 0.845, 1.560, 2.100, 0.500, 1.360, 10.3, 11.5 };
+    double wmax[] = { 0.453, 0.515, 0.600, 0.680, 0.885, 1.660, 2.300, 0.680, 1.390, 11.3, 12.5 };
+    /* 30, 30, 30, 30, 30, 30, 30, 15, 30, 100, 100 */
+
+    strcpy(lsat->sensor, "OLI/TIRS");
+
+    lsat->bands = 11;
+    for (i = 0; i < lsat->bands; i++) {
+        lsat->band[i].number = *(band + i);
+        lsat->band[i].code = *(code + i);
+        lsat->band[i].wavemax = *(wmax + i);
+        lsat->band[i].wavemin = *(wmin + i);
+        lsat->band[i].qcalmax = 255.;
+        lsat->band[i].qcalmin = 1.;
+        lsat->band[i].thermal = (lsat->band[i].number > 9 ? 1 : 0);
+    }
+    return;
+}
 
 /** **********************************************
  ** Before access to these functions ...
@@ -154,9 +180,10 @@ void set_MSS2(lsat_data * lsat)
 
     julian = julian_char(lsat->creation);
     if (julian < julian_char("1975-07-16"))
-	i = 0;
+        i = 0;
     else
-	i = 1;
+        i = 1;
+
     lmax = Lmax[i];
     lmin = Lmin[i];
 
@@ -205,6 +232,7 @@ void set_MSS3(lsat_data * lsat)
 	i = 0;
     else
 	i = 1;
+
     lmax = Lmax[i];
     lmin = Lmin[i];
 
@@ -256,6 +284,7 @@ void set_MSS4(lsat_data * lsat)
 	    i = 1;
     else
 	    i = 2;
+
     lmax = Lmax[i];
     lmin = Lmin[i];
 
@@ -305,6 +334,7 @@ void set_TM4(lsat_data * lsat)
 	    i = 1;
     else
 	    i = 2;
+
     lmax = Lmax[i];
     lmin = Lmin[i];
 
@@ -361,6 +391,7 @@ void set_MSS5(lsat_data * lsat)
 	i = 1;
     else
 	i = 2;
+
     lmax = Lmax[i];
     lmin = Lmin[i];
 
@@ -410,6 +441,7 @@ void set_TM5(lsat_data * lsat)
 	    i = 1;
     else
 	    i = 2;
+
     lmax = Lmax[i];
     lmin = Lmin[i];
     if (i == 2) {		/* in Chander, Markham and Barsi 2007 */
@@ -515,3 +547,47 @@ void set_ETM(lsat_data * lsat, char gain[])
     G_debug(1, "Landsat-7 ETM+");
     return;
 }
+
+/****************************************************************************
+ * PURPOSE:     Store values of Landsat-8 OLI/TIRS
+ *              February 14, 2013
+ *****************************************************************************/
+void set_OLI(lsat_data * lsat)
+{
+    int i, j;
+    double julian, *lmax, *lmin;
+
+    /* Spectral radiances at detector
+    double Lmax[][4] = {
+        {220., 175., 145., 147.},
+        {259., 179., 149., 128.}
+    };
+    double Lmin[][4] = {
+        {4., 3., 3., 1.},
+        {4., 3., 3., 1.}
+    };
+    * Solar exoatmospheric spectral irradiances
+    double esun[] = { 1824., 1570., 1249., 853.4 };
+
+    lmax = Lmax[i];
+    lmin = Lmin[i];
+
+    lsat->number = 3;
+    sensor_MSS(lsat);
+
+    lsat->dist_es = earth_sun(lsat->date);
+
+    for (i = 0; i < lsat->bands; i++) {
+        j = lsat->band[i].number - 1;
+        lsat->band[i].esun = *(esun + j);
+        lsat->band[i].lmax = *(lmax + j);
+        lsat->band[i].lmin = *(lmin + j);
+        if (lsat->band[i].thermal) {
+            lsat->band[i].K1 = 0;
+            lsat->band[i].K2 = 0;
+        }
+    }
+    */
+    G_debug(1, "Landsat-8 LDCM");
+    return;
+}

+ 1 - 2
imagery/i.landsat.toar/local_proto.h

@@ -4,8 +4,7 @@
 #include <string.h>
 #include "landsat.h"
 
-void lsat_mtldata(char *, lsat_data *);
-void lsat_metdata(char *, lsat_data *);
+void lsat_metadata(char *, lsat_data *);
 
 void set_MSS1(lsat_data *);
 void set_MSS2(lsat_data *);

+ 16 - 39
imagery/i.landsat.toar/main.c

@@ -213,10 +213,6 @@ int main(int argc, char *argv[])
 	    G_fatal_error(_("Illegal date format: [%s] (yyyy-mm-dd)"),
 			  lsat.date);
     }
-    /* Unnecessary because G_zero filled
-    else
-	lsat.date[0] = '\0';
-	*/
 
     if (pdate->answer != NULL) {
 	strncpy(lsat.creation, pdate->answer, 11);
@@ -225,36 +221,21 @@ int main(int argc, char *argv[])
 	    G_fatal_error(_("Illegal date format: [%s] (yyyy-mm-dd)"),
 			  lsat.creation);
     }
-    /* Unnecessary because G_zero filled
-    else
-	lsat.creation[0] = '\0';
-	*/
 
     lsat.sun_elev = elev->answer == NULL ? 0. : atof(elev->answer);
     percent = atof(perc->answer);
     pixel = atoi(dark->answer);
     rayleigh = atof(atmo->answer);
 
-    /* Unnecessary because G_zero filled
-    lsat.flag = NOMETADATAFILE;
-     */
     /* Data from metadata file */
+    /* Unnecessary because G_zero filled, but sanity */
+    lsat.flag = NOMETADATAFILE;
     if (met != NULL)
     {
         lsat.flag = METADATAFILE;
-        i = strlen(met);
-        if (strcmp(met + i - 7, "MTL.txt") == 0)
-        {
-            lsat_mtldata(met, &lsat);
-        }
-        else if (strcmp(met + i - 4, ".met") == 0)
-        {
-            if (strcmp(sensorname, "tm7") == 0)
-                lsat_mtldata(met, &lsat);  /* old .met of Landsat-7 = new MTL file */
-            else
-                lsat_metdata(met, &lsat);
-        }
+        lsat_metadata( met, &lsat );
         G_debug(1, "lsat.number = %d, lsat.sensor = [%s]", lsat.number, lsat.sensor);
+        
         if (!lsat.sensor || lsat.number > 7 || lsat.number < 1)
             G_fatal_error(_("Failed to identify satellite"));
 
@@ -270,17 +251,14 @@ int main(int argc, char *argv[])
 		      adate->key, elev->key);
     }
     else {
-	if (strcmp(sensorname, "tm7") == 0) {	/* Need gain */
-        if (bgain->answer != NULL && strlen(bgain->answer) == 9) {
+        /* Need gain */
+	if (strcmp(sensorname, "tm7") == 0) {
+            if (bgain->answer == NULL || strlen(bgain->answer) != 9)
+                G_fatal_error(_("Landsat-7 requires band gain with 9 (H/L) data"));
             set_ETM(&lsat, bgain->answer);
-            G_debug(1, "Landsat 7 ETM+");
-        }
-        else {
-            G_fatal_error(_("Landsat-7 requires band gain with 9 (H/L) data"));
         }
-    }
-	else {  /* Not need gain */
-        if (strcmp(sensorname, "tm5") == 0)
+        /* Not need gain */
+        else if (strcmp(sensorname, "tm5") == 0)
             set_TM5(&lsat);
         else if (strcmp(sensorname, "tm4") == 0)
             set_TM4(&lsat);
@@ -296,23 +274,22 @@ int main(int argc, char *argv[])
             set_MSS1(&lsat);
         else
             G_fatal_error(_("Unknown satellite type (defined by '%s')"), sensor->key);
-        }
     }
 
 	/*****************************************
 	* ------------ PREPARATION --------------
 	*****************************************/
-    if (G_strcasecmp(metho->answer, "corrected") == 0)
+    if (strcasecmp(metho->answer, "corrected") == 0)
 	method = CORRECTED;
-    else if (G_strcasecmp(metho->answer, "dos1") == 0)
+    else if (strcasecmp(metho->answer, "dos1") == 0)
 	method = DOS1;
-    else if (G_strcasecmp(metho->answer, "dos2") == 0)
+    else if (strcasecmp(metho->answer, "dos2") == 0)
 	method = DOS2;
-    else if (G_strcasecmp(metho->answer, "dos2b") == 0)
+    else if (strcasecmp(metho->answer, "dos2b") == 0)
 	method = DOS2b;
-    else if (G_strcasecmp(metho->answer, "dos3") == 0)
+    else if (strcasecmp(metho->answer, "dos3") == 0)
 	method = DOS3;
-    else if (G_strcasecmp(metho->answer, "dos4") == 0)
+    else if (strcasecmp(metho->answer, "dos4") == 0)
 	method = DOS4;
     else
 	method = UNCORRECTED;