grib_util_set_spec: Refactoring

This commit is contained in:
Shahram Najm 2021-02-19 22:32:53 +00:00
parent 357f652d5a
commit 624b85f8ee
1 changed files with 20 additions and 43 deletions

View File

@ -935,7 +935,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
grib_handle* h_out = NULL;
grib_handle* h_sample = NULL;
const char* grid_type = NULL;
char name[1024];
char sample_name[1024]; /* name of sample file */
char input_grid_type[100];
char input_packing_type[100];
long input_bits_per_value = 0;
@ -1148,10 +1148,10 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
case GRIB_UTIL_GRID_SPEC_REDUCED_GG:
case GRIB_UTIL_GRID_SPEC_REDUCED_ROTATED_GG:
/* Choose a sample with the right Gaussian number and edition */
sprintf(name, "%s_pl_%ld_grib%ld", grid_type, spec->N, editionNumber);
sprintf(sample_name, "%s_pl_%ld_grib%ld", grid_type, spec->N, editionNumber);
if (spec->pl && spec->pl_size) {
/* GRIB-834: pl is given so can use any of the reduced_gg_pl samples */
sprintf(name, "%s_pl_grib%ld", grid_type, editionNumber);
sprintf(sample_name, "%s_pl_grib%ld", grid_type, editionNumber);
}
break;
case GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA:
@ -1164,13 +1164,13 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
grid_type);
convertEditionEarlier = 1;
}
sprintf(name, "GRIB%ld", editionNumber);
sprintf(sample_name, "GRIB%ld", editionNumber);
break;
case GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL:
sprintf(name, "GRIB%ld", editionNumber);
sprintf(sample_name, "GRIB%ld", editionNumber);
break;
default:
sprintf(name, "%s_pl_grib%ld", grid_type, editionNumber);
sprintf(sample_name, "%s_pl_grib%ld", grid_type, editionNumber);
}
if (spec->pl && spec->grid_name) {
@ -1179,12 +1179,12 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
goto cleanup;
}
if (spec->grid_name) {
sprintf(name, "%s_grib%ld", spec->grid_name, editionNumber);
sprintf(sample_name, "%s_grib%ld", spec->grid_name, editionNumber);
}
}
/* TODO: recycle h_sample handle */
h_sample = grib_handle_new_from_samples(NULL, name);
h_sample = grib_handle_new_from_samples(NULL, sample_name);
if (!h_sample) {
*err = GRIB_INVALID_FILE;
return NULL;
@ -1232,15 +1232,12 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
case GRIB_UTIL_GRID_SPEC_ROTATED_GG:
COPY_SPEC_LONG(bitmapPresent);
if (spec->missingValue)
COPY_SPEC_DOUBLE(missingValue);
if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue);
SET_LONG_VALUE("ijDirectionIncrementGiven", 1);
/* TODO: add Assert */
COPY_SPEC_LONG(Ni);
COPY_SPEC_DOUBLE(iDirectionIncrementInDegrees);
COPY_SPEC_LONG(Nj);
COPY_SPEC_LONG(N);
@ -1255,12 +1252,10 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
case GRIB_UTIL_GRID_SPEC_REDUCED_LL:
COPY_SPEC_LONG(bitmapPresent);
if (spec->missingValue)
COPY_SPEC_DOUBLE(missingValue);
if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue);
SET_LONG_VALUE("ijDirectionIncrementGiven", 0);
COPY_SPEC_LONG(Nj);
COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees);
COPY_SPEC_DOUBLE(longitudeOfLastGridPointInDegrees);
@ -1270,8 +1265,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
case GRIB_UTIL_GRID_SPEC_POLAR_STEREOGRAPHIC:
COPY_SPEC_LONG(bitmapPresent);
if (spec->missingValue)
COPY_SPEC_DOUBLE(missingValue);
if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue);
COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees);
COPY_SPEC_DOUBLE(latitudeOfFirstGridPointInDegrees);
@ -1281,26 +1275,20 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
/* default iScansNegatively=0 jScansPositively=0 is ok */
COPY_SPEC_LONG(iScansNegatively);
COPY_SPEC_LONG(jScansPositively);
COPY_SPEC_DOUBLE(orientationOfTheGridInDegrees);
COPY_SPEC_LONG(DxInMetres);
COPY_SPEC_LONG(DyInMetres);
break;
case GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA:
COPY_SPEC_LONG(bitmapPresent);
if (spec->missingValue)
COPY_SPEC_DOUBLE(missingValue);
if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue);
COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees);
COPY_SPEC_DOUBLE(latitudeOfFirstGridPointInDegrees);
COPY_SPEC_LONG(Ni); /* same as Nx */
COPY_SPEC_LONG(Nj); /* same as Ny */
/* TODO
* pass in extra keys e.g. Dx, Dy, standardParallel and centralLongitude
*/
/* TODO: pass in extra keys e.g. Dx, Dy, standardParallel and centralLongitude */
/*
COPY_SPEC_LONG(DxInMetres);
@ -1314,16 +1302,12 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
break;
case GRIB_UTIL_GRID_SPEC_UNSTRUCTURED:
COPY_SPEC_LONG(bitmapPresent);
if (spec->missingValue)
COPY_SPEC_DOUBLE(missingValue);
/*
* TODO: Other keys
*/
if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue);
/* TODO: Other keys */
break;
case GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL:
COPY_SPEC_LONG(bitmapPresent);
if (spec->missingValue)
COPY_SPEC_DOUBLE(missingValue);
if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue);
COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees);
COPY_SPEC_DOUBLE(latitudeOfFirstGridPointInDegrees);
COPY_SPEC_LONG(Ni); /* same as Nx */
@ -1332,11 +1316,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
/*
* Note: DxInMetres and DyInMetres
* should be 'double' and not integer. WMO GRIB2 uses millimetres!
* TODO:
* Add other keys like Latin1, LoV etc
*err = GRIB_NOT_IMPLEMENTED;
goto cleanup;
* TODO: Add other keys like Latin1, LoV etc
*/
break;
@ -1344,16 +1324,13 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
case GRIB_UTIL_GRID_SPEC_REDUCED_ROTATED_GG:
COPY_SPEC_LONG(bitmapPresent);
if (spec->missingValue)
COPY_SPEC_DOUBLE(missingValue);
if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue);
SET_LONG_VALUE("ijDirectionIncrementGiven", 0);
COPY_SPEC_LONG(Nj);
COPY_SPEC_LONG(N);
COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees);
COPY_SPEC_DOUBLE(longitudeOfLastGridPointInDegrees);
COPY_SPEC_DOUBLE(latitudeOfFirstGridPointInDegrees);
COPY_SPEC_DOUBLE(latitudeOfLastGridPointInDegrees);
@ -1433,7 +1410,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
/* Have to delay JPEG packing:
* Reason 1: It is not available in GRIB1 and so we have to wait until we change edition
* Reason 2: It has to be done AFTER we set the data values
*/
*/
if (strcmp(input_packing_type, "grid_jpeg") && !strcmp(input_packing_type, "grid_simple"))
setJpegPacking = 1;
break;
@ -1441,7 +1418,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
/* Have to delay CCSDS packing:
* Reason 1: It is not available in GRIB1 and so we have to wait until we change edition
* Reason 2: It has to be done AFTER we set the data values
*/
*/
if (strcmp(input_packing_type, "grid_ccsds") && !strcmp(input_packing_type, "grid_simple"))
setCcsdsPacking = 1;
break;