GRIB-238: iterator on rotated latlon (Also GRIB-807)

This commit is contained in:
Shahram Najm 2015-08-14 14:23:48 +01:00
parent 71ba77254b
commit ceb3451386
17 changed files with 420 additions and 308 deletions

View File

@ -1,21 +1,21 @@
Latitude, Longitude, Value
20.000 24.000 5
20.000 23.000 4
20.000 22.000 3
20.000 21.000 2
20.000 20.000 1
19.000 24.000 10
19.000 23.000 9
19.000 22.000 8
19.000 21.000 7
19.000 20.000 6
18.000 24.000 15
18.000 23.000 14
18.000 22.000 13
18.000 21.000 12
18.000 20.000 11
17.000 24.000 20
17.000 23.000 19
17.000 22.000 18
17.000 21.000 17
17.000 20.000 16
59.143 131.824 5
59.882 132.969 4
60.606 134.175 3
61.316 135.444 2
62.009 136.781 1
59.743 130.250 10
60.500 131.388 9
61.243 132.588 8
61.972 133.855 7
62.685 135.193 6
60.323 128.619 15
61.099 129.746 14
61.861 130.937 13
62.609 132.197 12
63.342 133.531 11
60.883 126.931 20
61.677 128.042 19
62.458 129.219 18
63.226 130.468 17
63.979 131.793 16

View File

@ -1,36 +1,36 @@
Latitude, Longitude, Value
20.000 24.000 5
20.000 23.000 4
20.000 22.000 3
20.000 21.000 2
20.000 20.000 1
19.000 24.000 10
19.000 23.000 9
19.000 22.000 8
19.000 21.000 7
19.000 20.000 6
18.000 24.000 15
18.000 23.000 14
18.000 22.000 13
18.000 21.000 12
18.000 20.000 11
17.000 24.000 20
17.000 23.000 19
17.000 22.000 18
17.000 21.000 17
17.000 20.000 16
16.000 24.000 25
16.000 23.000 24
16.000 22.000 23
16.000 21.000 22
16.000 20.000 21
15.000 24.000 30
15.000 23.000 29
15.000 22.000 28
15.000 21.000 27
15.000 20.000 26
14.000 24.000 35
14.000 23.000 34
14.000 22.000 33
14.000 21.000 32
14.000 20.000 31
59.143 131.824 5
59.882 132.969 4
60.606 134.175 3
61.316 135.444 2
62.009 136.781 1
59.743 130.250 10
60.500 131.388 9
61.243 132.588 8
61.972 133.855 7
62.685 135.193 6
60.323 128.619 15
61.099 129.746 14
61.861 130.937 13
62.609 132.197 12
63.342 133.531 11
60.883 126.931 20
61.677 128.042 19
62.458 129.219 18
63.226 130.468 17
63.979 131.793 16
61.421 125.183 25
62.233 126.274 24
63.033 127.433 23
63.820 128.665 22
64.594 129.976 21
61.935 123.376 30
62.765 124.441 29
63.584 125.575 28
64.392 126.785 27
65.186 128.076 26
62.425 121.508 35
63.273 122.542 34
64.111 123.647 33
64.938 124.828 32
65.752 126.092 31

View File

@ -1,33 +1,33 @@
Latitude, Longitude, Value
20.000 27.000 8
20.000 26.000 7
20.000 25.000 6
20.000 24.000 5
20.000 23.000 4
20.000 22.000 3
20.000 21.000 2
20.000 20.000 1
19.000 27.000 16
19.000 26.000 15
19.000 25.000 14
19.000 24.000 13
19.000 23.000 12
19.000 22.000 11
19.000 21.000 10
19.000 20.000 9
18.000 27.000 24
18.000 26.000 23
18.000 25.000 22
18.000 24.000 21
18.000 23.000 20
18.000 22.000 19
18.000 21.000 18
18.000 20.000 17
17.000 27.000 32
17.000 26.000 31
17.000 25.000 30
17.000 24.000 29
17.000 23.000 28
17.000 22.000 27
17.000 21.000 26
17.000 20.000 25
56.853 128.720 8
57.628 129.702 7
58.392 130.736 6
59.143 131.824 5
59.882 132.969 4
60.606 134.175 3
61.316 135.444 2
62.009 136.781 1
57.401 127.178 16
58.193 128.149 15
58.974 129.171 14
59.743 130.250 13
60.500 131.388 12
61.243 132.588 11
61.972 133.855 10
62.685 135.193 9
57.930 125.591 24
58.738 126.546 23
59.536 127.554 22
60.323 128.619 21
61.099 129.746 20
61.861 130.937 19
62.609 132.197 18
63.342 133.531 17
58.438 123.957 32
59.263 124.893 31
60.078 125.883 30
60.883 126.931 29
61.677 128.042 28
62.458 129.219 27
63.226 130.468 26
63.979 131.793 25

View File

@ -1,57 +1,57 @@
Latitude, Longitude, Value
20.000 27.000 8
20.000 26.000 7
20.000 25.000 6
20.000 24.000 5
20.000 23.000 4
20.000 22.000 3
20.000 21.000 2
20.000 20.000 1
19.000 27.000 16
19.000 26.000 15
19.000 25.000 14
19.000 24.000 13
19.000 23.000 12
19.000 22.000 11
19.000 21.000 10
19.000 20.000 9
18.000 27.000 24
18.000 26.000 23
18.000 25.000 22
18.000 24.000 21
18.000 23.000 20
18.000 22.000 19
18.000 21.000 18
18.000 20.000 17
17.000 27.000 32
17.000 26.000 31
17.000 25.000 30
17.000 24.000 29
17.000 23.000 28
17.000 22.000 27
17.000 21.000 26
17.000 20.000 25
16.000 27.000 40
16.000 26.000 39
16.000 25.000 38
16.000 24.000 37
16.000 23.000 36
16.000 22.000 35
16.000 21.000 34
16.000 20.000 33
15.000 27.000 48
15.000 26.000 47
15.000 25.000 46
15.000 24.000 45
15.000 23.000 44
15.000 22.000 43
15.000 21.000 42
15.000 20.000 41
14.000 27.000 56
14.000 26.000 55
14.000 25.000 54
14.000 24.000 53
14.000 23.000 52
14.000 22.000 51
14.000 21.000 50
14.000 20.000 49
56.853 128.720 8
57.628 129.702 7
58.392 130.736 6
59.143 131.824 5
59.882 132.969 4
60.606 134.175 3
61.316 135.444 2
62.009 136.781 1
57.401 127.178 16
58.193 128.149 15
58.974 129.171 14
59.743 130.250 13
60.500 131.388 12
61.243 132.588 11
61.972 133.855 10
62.685 135.193 9
57.930 125.591 24
58.738 126.546 23
59.536 127.554 22
60.323 128.619 21
61.099 129.746 20
61.861 130.937 19
62.609 132.197 18
63.342 133.531 17
58.438 123.957 32
59.263 124.893 31
60.078 125.883 30
60.883 126.931 29
61.677 128.042 28
62.458 129.219 27
63.226 130.468 26
63.979 131.793 25
58.925 122.277 40
59.766 123.189 39
60.598 124.157 38
61.421 125.183 37
62.233 126.274 36
63.033 127.433 35
63.820 128.665 34
64.594 129.976 33
59.389 120.549 48
60.246 121.435 47
61.095 122.376 46
61.935 123.376 45
62.765 124.441 44
63.584 125.575 43
64.392 126.785 42
65.186 128.076 41
59.830 118.775 56
60.703 119.629 55
61.568 120.539 54
62.425 121.508 53
63.273 122.542 52
64.111 123.647 51
64.938 124.828 50
65.752 126.092 49

View File

@ -1,21 +1,21 @@
Latitude, Longitude, Value
17.000 20.000 16
17.000 21.000 17
17.000 22.000 18
17.000 23.000 19
17.000 24.000 20
18.000 20.000 11
18.000 21.000 12
18.000 22.000 13
18.000 23.000 14
18.000 24.000 15
19.000 20.000 6
19.000 21.000 7
19.000 22.000 8
19.000 23.000 9
19.000 24.000 10
20.000 20.000 1
20.000 21.000 2
20.000 22.000 3
20.000 23.000 4
20.000 24.000 5
63.979 131.793 16
63.226 130.468 17
62.458 129.219 18
61.677 128.042 19
60.883 126.931 20
63.342 133.531 11
62.609 132.197 12
61.861 130.937 13
61.099 129.746 14
60.323 128.619 15
62.685 135.193 6
61.972 133.855 7
61.243 132.588 8
60.500 131.388 9
59.743 130.250 10
62.009 136.781 1
61.316 135.444 2
60.606 134.175 3
59.882 132.969 4
59.143 131.824 5

View File

@ -1,36 +1,36 @@
Latitude, Longitude, Value
14.000 20.000 31
14.000 21.000 32
14.000 22.000 33
14.000 23.000 34
14.000 24.000 35
15.000 20.000 26
15.000 21.000 27
15.000 22.000 28
15.000 23.000 29
15.000 24.000 30
16.000 20.000 21
16.000 21.000 22
16.000 22.000 23
16.000 23.000 24
16.000 24.000 25
17.000 20.000 16
17.000 21.000 17
17.000 22.000 18
17.000 23.000 19
17.000 24.000 20
18.000 20.000 11
18.000 21.000 12
18.000 22.000 13
18.000 23.000 14
18.000 24.000 15
19.000 20.000 6
19.000 21.000 7
19.000 22.000 8
19.000 23.000 9
19.000 24.000 10
20.000 20.000 1
20.000 21.000 2
20.000 22.000 3
20.000 23.000 4
20.000 24.000 5
65.752 126.092 31
64.938 124.828 32
64.111 123.647 33
63.273 122.542 34
62.425 121.508 35
65.186 128.076 26
64.392 126.785 27
63.584 125.575 28
62.765 124.441 29
61.935 123.376 30
64.594 129.976 21
63.820 128.665 22
63.033 127.433 23
62.233 126.274 24
61.421 125.183 25
63.979 131.793 16
63.226 130.468 17
62.458 129.219 18
61.677 128.042 19
60.883 126.931 20
63.342 133.531 11
62.609 132.197 12
61.861 130.937 13
61.099 129.746 14
60.323 128.619 15
62.685 135.193 6
61.972 133.855 7
61.243 132.588 8
60.500 131.388 9
59.743 130.250 10
62.009 136.781 1
61.316 135.444 2
60.606 134.175 3
59.882 132.969 4
59.143 131.824 5

View File

@ -1,33 +1,33 @@
Latitude, Longitude, Value
17.000 20.000 25
17.000 21.000 26
17.000 22.000 27
17.000 23.000 28
17.000 24.000 29
17.000 25.000 30
17.000 26.000 31
17.000 27.000 32
18.000 20.000 17
18.000 21.000 18
18.000 22.000 19
18.000 23.000 20
18.000 24.000 21
18.000 25.000 22
18.000 26.000 23
18.000 27.000 24
19.000 20.000 9
19.000 21.000 10
19.000 22.000 11
19.000 23.000 12
19.000 24.000 13
19.000 25.000 14
19.000 26.000 15
19.000 27.000 16
20.000 20.000 1
20.000 21.000 2
20.000 22.000 3
20.000 23.000 4
20.000 24.000 5
20.000 25.000 6
20.000 26.000 7
20.000 27.000 8
63.979 131.793 25
63.226 130.468 26
62.458 129.219 27
61.677 128.042 28
60.883 126.931 29
60.078 125.883 30
59.263 124.893 31
58.438 123.957 32
63.342 133.531 17
62.609 132.197 18
61.861 130.937 19
61.099 129.746 20
60.323 128.619 21
59.536 127.554 22
58.738 126.546 23
57.930 125.591 24
62.685 135.193 9
61.972 133.855 10
61.243 132.588 11
60.500 131.388 12
59.743 130.250 13
58.974 129.171 14
58.193 128.149 15
57.401 127.178 16
62.009 136.781 1
61.316 135.444 2
60.606 134.175 3
59.882 132.969 4
59.143 131.824 5
58.392 130.736 6
57.628 129.702 7
56.853 128.720 8

View File

@ -1,57 +1,57 @@
Latitude, Longitude, Value
14.000 20.000 49
14.000 21.000 50
14.000 22.000 51
14.000 23.000 52
14.000 24.000 53
14.000 25.000 54
14.000 26.000 55
14.000 27.000 56
15.000 20.000 41
15.000 21.000 42
15.000 22.000 43
15.000 23.000 44
15.000 24.000 45
15.000 25.000 46
15.000 26.000 47
15.000 27.000 48
16.000 20.000 33
16.000 21.000 34
16.000 22.000 35
16.000 23.000 36
16.000 24.000 37
16.000 25.000 38
16.000 26.000 39
16.000 27.000 40
17.000 20.000 25
17.000 21.000 26
17.000 22.000 27
17.000 23.000 28
17.000 24.000 29
17.000 25.000 30
17.000 26.000 31
17.000 27.000 32
18.000 20.000 17
18.000 21.000 18
18.000 22.000 19
18.000 23.000 20
18.000 24.000 21
18.000 25.000 22
18.000 26.000 23
18.000 27.000 24
19.000 20.000 9
19.000 21.000 10
19.000 22.000 11
19.000 23.000 12
19.000 24.000 13
19.000 25.000 14
19.000 26.000 15
19.000 27.000 16
20.000 20.000 1
20.000 21.000 2
20.000 22.000 3
20.000 23.000 4
20.000 24.000 5
20.000 25.000 6
20.000 26.000 7
20.000 27.000 8
65.752 126.092 49
64.938 124.828 50
64.111 123.647 51
63.273 122.542 52
62.425 121.508 53
61.568 120.539 54
60.703 119.629 55
59.830 118.775 56
65.186 128.076 41
64.392 126.785 42
63.584 125.575 43
62.765 124.441 44
61.935 123.376 45
61.095 122.376 46
60.246 121.435 47
59.389 120.549 48
64.594 129.976 33
63.820 128.665 34
63.033 127.433 35
62.233 126.274 36
61.421 125.183 37
60.598 124.157 38
59.766 123.189 39
58.925 122.277 40
63.979 131.793 25
63.226 130.468 26
62.458 129.219 27
61.677 128.042 28
60.883 126.931 29
60.078 125.883 30
59.263 124.893 31
58.438 123.957 32
63.342 133.531 17
62.609 132.197 18
61.861 130.937 19
61.099 129.746 20
60.323 128.619 21
59.536 127.554 22
58.738 126.546 23
57.930 125.591 24
62.685 135.193 9
61.972 133.855 10
61.243 132.588 11
60.500 131.388 12
59.743 130.250 13
58.974 129.171 14
58.193 128.149 15
57.401 127.178 16
62.009 136.781 1
61.316 135.444 2
60.606 134.175 3
59.882 132.969 4
59.143 131.824 5
58.392 130.736 6
57.628 129.702 7
56.853 128.720 8

View File

@ -16,3 +16,4 @@ meta geography.longitudeOfSouthernPoleInDegrees scale(longitudeOfSouthernPole
ibmfloat geography.angleOfRotationInDegrees : dump;
alias angleOfRotation =angleOfRotationInDegrees;
alias is_rotated_grid = one;

View File

@ -42,6 +42,7 @@ meta gridDefinitionDescription codetable_title(dataRepresentationType);
# Grid definition
# (according to data representation type - octet 6 above)
alias is_rotated_grid=zero;
if (dataRepresentationType < 192)
{

View File

@ -45,6 +45,7 @@ if(numberOfOctectsForNumberOfPoints == 0){
codetable[2] gridDefinitionTemplateNumber ('3.1.table',masterDir,localDir) =0 : dump,edition_specific;
meta gridDefinitionDescription codetable_title(gridDefinitionTemplateNumber);
alias is_rotated_grid=zero;
template gridDefinitionSection "grib2/template.3.[gridDefinitionTemplateNumber:l].def";

View File

@ -25,3 +25,4 @@ alias geography.angleOfRotationInDegrees=angleOfRotation;
alias angleOfRotationOfProjection=angleOfRotation;
alias is_rotated_grid=one;

View File

@ -177,7 +177,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t *len)
grib_accessor_latitudes* self = (grib_accessor_latitudes*)a;
int ret = 0;
double* v=val;
double dummy=0;
double dummyLon=0, dummyVal=0;
size_t size=0;
long count=0;
grib_iterator* iter=NULL;
@ -215,7 +215,7 @@ static int unpack_double(grib_accessor* a, double* val, size_t *len)
return ret;
}
while(grib_iterator_next(iter,v++,&dummy,&dummy)) {}
while(grib_iterator_next(iter,v++,&dummyLon,&dummyVal)) {}
grib_iterator_delete(iter);
*len=size;
@ -258,7 +258,7 @@ static int get_distinct(grib_accessor* a,double** val,long* len) {
double prev;
double *v=NULL;
double *v1=NULL;
double dummy;
double dummyLon=0, dummyVal=0;
int ret=0;
int i;
long jScansPositively=0; /*default: north to south*/
@ -278,7 +278,7 @@ static int get_distinct(grib_accessor* a,double** val,long* len) {
}
*val=v;
while(grib_iterator_next(iter,v++,&dummy,&dummy)) {}
while(grib_iterator_next(iter,v++,&dummyLon,&dummyVal)) {}
grib_iterator_delete(iter);
v=*val;

View File

@ -165,7 +165,7 @@ static int unpack_double (grib_accessor* a, double* val, size_t *len)
grib_accessor_longitudes* self = (grib_accessor_longitudes*)a;
int ret = 0;
double* v=val;
double dummy=0;
double dummyLat=0, dummyVal=0;
size_t size=0;
long count=0;
grib_iterator* iter=NULL;
@ -204,7 +204,7 @@ static int unpack_double (grib_accessor* a, double* val, size_t *len)
return ret;
}
while(grib_iterator_next(iter,&dummy,v++,&dummy)) {}
while(grib_iterator_next(iter,&dummyLat,v++,&dummyVal)) {}
grib_iterator_delete(iter);
*len=size;
@ -246,7 +246,7 @@ static int get_distinct(grib_accessor* a,double** val,long* len) {
double prev;
double *v=NULL;
double *v1=NULL;
double dummy;
double dummyLat=0, dummyVal=0;
int ret=0;
int i;
size_t size=*len;
@ -265,7 +265,7 @@ static int get_distinct(grib_accessor* a,double** val,long* len) {
}
*val=v;
while(grib_iterator_next(iter,&dummy,v++,&dummy)) {}
while(grib_iterator_next(iter,&dummyLat,v++,&dummyVal)) {}
grib_iterator_delete(iter);
v=*val;

View File

@ -53,6 +53,10 @@ typedef struct grib_iterator_gaussian{
long nap;
long nam;
long iScansNegatively;
long isRotated;
double angleOfRotation;
double southPoleLat;
double southPoleLon;
/* Members defined in gaussian */
} grib_iterator_gaussian;

View File

@ -8,10 +8,6 @@
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
/**************************************
* Enrico Fucile
**************************************/
#include "grib_api_internal.h"
/*
@ -20,7 +16,7 @@
START_CLASS_DEF
CLASS = iterator
SUPER = grib_iterator_class_regular
IMPLEMENTS = init
IMPLEMENTS = init;next
END_CLASS_DEF
*/
@ -39,6 +35,7 @@ or edit "iterator.class" and rerun ./make_class.pl
static void init_class (grib_iterator_class*);
static int init (grib_iterator* i,grib_handle*,grib_arguments*);
static int next (grib_iterator* i, double *lat, double *lon, double *val);
typedef struct grib_iterator_latlon{
@ -52,6 +49,10 @@ typedef struct grib_iterator_latlon{
long nap;
long nam;
long iScansNegatively;
long isRotated;
double angleOfRotation;
double southPoleLat;
double southPoleLon;
/* Members defined in latlon */
} grib_iterator_latlon;
@ -65,7 +66,7 @@ static grib_iterator_class _grib_iterator_class_latlon = {
&init_class, /* init_class */
&init, /* constructor */
0, /* destructor */
0, /* Next Value */
&next, /* Next Value */
0, /* Previous Value */
0, /* Reset the counter */
0, /* has next values */
@ -76,13 +77,98 @@ grib_iterator_class* grib_iterator_class_latlon = &_grib_iterator_class_latlon;
static void init_class(grib_iterator_class* c)
{
c->next = (*(c->super))->next;
c->previous = (*(c->super))->previous;
c->reset = (*(c->super))->reset;
c->has_next = (*(c->super))->has_next;
}
/* END_CLASS_IMP */
static const double degree_to_radian = M_PI/180.0;
static const double radian_to_degree = 180.0 * M_1_PI;
void unrotate(grib_handle* h,
const double inlat, const double inlon,
const double angleOfRot, const double southPoleLat, const double southPoleLon,
double* outlat, double* outlon)
{
/* Algorithm taken from ecKit */
const double lon_x = inlon;
const double lat_y = inlat;
/* First convert the data point from spherical lat lon to (x',y',z') */
double latr = lat_y * degree_to_radian;
double lonr = lon_x * degree_to_radian;
double xd = cos(lonr)*cos(latr);
double yd = sin(lonr)*cos(latr);
double zd = sin(latr);
double t = -(90.0 + southPoleLat);
double o = -southPoleLon;
double sin_t = sin(degree_to_radian * t);
double cos_t = cos(degree_to_radian * t);
double sin_o = sin(degree_to_radian * o);
double cos_o = cos(degree_to_radian * o);
double x = cos_t*cos_o*xd + sin_o*yd + sin_t*cos_o*zd;
double y = -cos_t*sin_o*xd + cos_o*yd - sin_t*sin_o*zd;
double z = -sin_t*xd + cos_t*zd;
double ret_lat=0, ret_lon=0;
/* Then convert back to 'normal' (lat,lon)
* Uses arcsin, to convert back to degrees, put in range -1 to 1 in case of slight rounding error
* avoid error on calculating e.g. asin(1.00000001) */
if (z > 1.0) z = 1.0;
if (z < -1.0) z = -1.0;
ret_lat = asin(z) * radian_to_degree;
ret_lon = atan2(y, x) * radian_to_degree;
/* Still get a very small rounding error, round to 6 decimal places */
ret_lat = roundf( ret_lat * 1000000.0 )/1000000.0;
ret_lon = roundf( ret_lon * 1000000.0 )/1000000.0;
ret_lon -= angleOfRot;
/* Make sure ret_lon is in range*/
/*
while (ret_lon < lonmin_) ret_lon += 360.0;
while (ret_lon >= lonmax_) ret_lon -= 360.0;
*/
*outlat = ret_lat;
*outlon = ret_lon;
}
static int next(grib_iterator* i, double *lat, double *lon, double *val)
{
/* GRIB-238: Support rotated lat/lon grids */
double ret_lat, ret_lon, ret_val;
grib_iterator_latlon* self = (grib_iterator_latlon*)i;
if((long)i->e >= (long)(i->nv-1)) return 0;
i->e++;
ret_lat = self->las[(long)floor(i->e/self->nap)];
ret_lon = self->los[(long)i->e%self->nap];
ret_val = i->data[i->e];
if (self->isRotated)
{
double new_lat = 0, new_lon = 0;
unrotate(i->h, ret_lat, ret_lon,
self->angleOfRotation, self->southPoleLat, self->southPoleLon,
&new_lat, &new_lon);
ret_lat = new_lat;
ret_lon = new_lon;
}
*lat = ret_lat;
*lon = ret_lon;
*val = ret_val;
return 1;
}
static int init(grib_iterator* i,grib_handle* h,grib_arguments* args)
{
@ -91,12 +177,22 @@ static int init(grib_iterator* i,grib_handle* h,grib_arguments* args)
double jdir;
double laf;
long jScansPositively;
long lai;
const char* latofirst = grib_arguments_get_name(h,args,self->carg++);
const char* jdirec = grib_arguments_get_name(h,args,self->carg++);
const char* s_jScansPositively = grib_arguments_get_name(h,args,self->carg++);
self->angleOfRotation = 0;
self->isRotated = 0;
self->southPoleLat = 0;
self->southPoleLon = 0;
if ((ret = grib_get_long(h, "is_rotated_grid", &self->isRotated))) return ret;
if (self->isRotated) {
if ((ret = grib_get_double_internal(h,"angleOfRotation", &self->angleOfRotation))) return ret;
if ((ret = grib_get_double_internal(h,"latitudeOfSouthernPoleInDegrees", &self->southPoleLat))) return ret;
if ((ret = grib_get_double_internal(h,"longitudeOfSouthernPoleInDegrees", &self->southPoleLon))) return ret;
}
if((ret = grib_get_double_internal(h,latofirst, &laf))) return ret;
if((ret = grib_get_double_internal(h,jdirec, &jdir))) return ret;

View File

@ -24,6 +24,10 @@
MEMBERS = long nap
MEMBERS = long nam
MEMBERS = long iScansNegatively
MEMBERS = long isRotated
MEMBERS = double angleOfRotation
MEMBERS = double southPoleLat
MEMBERS = double southPoleLon
END_CLASS_DEF
*/
@ -58,6 +62,10 @@ typedef struct grib_iterator_regular{
long nap;
long nam;
long iScansNegatively;
long isRotated;
double angleOfRotation;
double southPoleLat;
double southPoleLon;
} grib_iterator_regular;
extern grib_iterator_class* grib_iterator_class_gen;