This commit is contained in:
Enrico Fucile 2016-08-03 11:09:54 +01:00
parent 3045e70250
commit a283e5348f
10 changed files with 391 additions and 32 deletions

View File

@ -23,15 +23,17 @@ transient extractSubset=-1;
transient extractSubsetList={-1};
transient extractSubsetIntervalStart=-1;
transient extractSubsetIntervalEnd=-1;
transient extractAreaWestLongitude=0;
transient extractAreaEastLongitude=0;
transient extractAreaNorthLatitude=0;
transient extractAreaSouthLatitude=0;
transient extractAreaWestLongitude=1.1;
transient extractAreaEastLongitude=1.1;
transient extractAreaNorthLatitude=1.1;
transient extractAreaSouthLatitude=1.1;
transient extractAreaLatitudeRank=1;
transient extractAreaLongitudeRank=1;
meta doExtractSubsets bufr_extract_subsets(numericValues,pack,numberOfSubsets,extractSubset,extractSubsetIntervalStart,extractSubsetIntervalEnd,extractSubsetList);
#meta doExtractArea bufr_extract_area_subsets(doExtractSubsets,numberOfSubsets,extractSubsetList,
# extractAreaWestLongitude,extractAreaEastLongitude,extractAreaNorthLatitude,extractAreaSouthLatitude)=0;
meta doExtractArea bufr_extract_area_subsets(doExtractSubsets,numberOfSubsets,extractSubsetList,extractAreaWestLongitude,extractAreaEastLongitude,
extractAreaNorthLatitude,extractAreaSouthLatitude,extractAreaLongitudeRank,extractAreaLatitudeRank)=0;
template boot_edition "bufr/boot_edition_[ed:l].def";

View File

@ -248,6 +248,7 @@ list( APPEND grib_api_srcs
grib_accessor_class_unsigned_bits.c
grib_accessor_class_raw.c
grib_accessor_class_bufr_extract_subsets.c
grib_accessor_class_bufr_extract_area_subsets.c
grib_accessor_class_spd.c
grib_accessor_class_sum.c
grib_accessor_class_to_integer.c

View File

@ -16,6 +16,7 @@ extern grib_accessor_class* grib_accessor_class_bufr_data;
extern grib_accessor_class* grib_accessor_class_bufr_data_array;
extern grib_accessor_class* grib_accessor_class_bufr_data_element;
extern grib_accessor_class* grib_accessor_class_bufr_elements_table;
extern grib_accessor_class* grib_accessor_class_bufr_extract_area_subsets;
extern grib_accessor_class* grib_accessor_class_bufr_extract_subsets;
extern grib_accessor_class* grib_accessor_class_bufr_group;
extern grib_accessor_class* grib_accessor_class_bufr_has_delayed_replication;

View File

@ -0,0 +1,272 @@
/*
* Copyright 2005-2016 ECMWF.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_api_internal.h"
/*
This is used by make_class.pl
START_CLASS_DEF
CLASS = accessor
SUPER = grib_accessor_class_gen
IMPLEMENTS = init; get_native_type
IMPLEMENTS = pack_long;
MEMBERS = const char* doExtractSubsets
MEMBERS = const char* numberOfSubsets
MEMBERS = const char* extractSubsetList
MEMBERS = const char* extractAreaWestLongitude
MEMBERS = const char* extractAreaEastLongitude
MEMBERS = const char* extractAreaNorthLatitude
MEMBERS = const char* extractAreaSouthLatitude
MEMBERS = const char* extractAreaLongitudeRank
MEMBERS = const char* extractAreaLatitudeRank
END_CLASS_DEF
*/
/* START_CLASS_IMP */
/*
Don't edit anything between START_CLASS_IMP and END_CLASS_IMP
Instead edit values between START_CLASS_DEF and END_CLASS_DEF
or edit "accessor.class" and rerun ./make_class.pl
*/
static int get_native_type(grib_accessor*);
static int pack_long(grib_accessor*, const long* val,size_t *len);
static void init(grib_accessor*,const long, grib_arguments* );
static void init_class(grib_accessor_class*);
typedef struct grib_accessor_bufr_extract_area_subsets {
grib_accessor att;
/* Members defined in gen */
/* Members defined in bufr_extract_area_subsets */
const char* doExtractSubsets;
const char* numberOfSubsets;
const char* extractSubsetList;
const char* extractAreaWestLongitude;
const char* extractAreaEastLongitude;
const char* extractAreaNorthLatitude;
const char* extractAreaSouthLatitude;
const char* extractAreaLongitudeRank;
const char* extractAreaLatitudeRank;
} grib_accessor_bufr_extract_area_subsets;
extern grib_accessor_class* grib_accessor_class_gen;
static grib_accessor_class _grib_accessor_class_bufr_extract_area_subsets = {
&grib_accessor_class_gen, /* super */
"bufr_extract_area_subsets", /* name */
sizeof(grib_accessor_bufr_extract_area_subsets), /* size */
0, /* inited */
&init_class, /* init_class */
&init, /* init */
0, /* post_init */
0, /* free mem */
0, /* describes himself */
0, /* get length of section */
0, /* get length of string */
0, /* get number of values */
0, /* get number of bytes */
0, /* get offset to bytes */
&get_native_type, /* get native type */
0, /* get sub_section */
0, /* grib_pack procedures long */
0, /* grib_pack procedures long */
&pack_long, /* grib_pack procedures long */
0, /* grib_unpack procedures long */
0, /* grib_pack procedures double */
0, /* grib_unpack procedures double */
0, /* grib_pack procedures string */
0, /* grib_unpack procedures string */
0, /* grib_pack array procedures string */
0, /* grib_unpack array procedures string */
0, /* grib_pack procedures bytes */
0, /* grib_unpack procedures bytes */
0, /* pack_expression */
0, /* notify_change */
0, /* update_size */
0, /* preferred_size */
0, /* resize */
0, /* nearest_smaller_value */
0, /* next accessor */
0, /* compare vs. another accessor */
0, /* unpack only ith value */
0, /* unpack a subarray */
0, /* clear */
0, /* clone accessor */
};
grib_accessor_class* grib_accessor_class_bufr_extract_area_subsets = &_grib_accessor_class_bufr_extract_area_subsets;
static void init_class(grib_accessor_class* c)
{
c->dump = (*(c->super))->dump;
c->next_offset = (*(c->super))->next_offset;
c->string_length = (*(c->super))->string_length;
c->value_count = (*(c->super))->value_count;
c->byte_count = (*(c->super))->byte_count;
c->byte_offset = (*(c->super))->byte_offset;
c->sub_section = (*(c->super))->sub_section;
c->pack_missing = (*(c->super))->pack_missing;
c->is_missing = (*(c->super))->is_missing;
c->unpack_long = (*(c->super))->unpack_long;
c->pack_double = (*(c->super))->pack_double;
c->unpack_double = (*(c->super))->unpack_double;
c->pack_string = (*(c->super))->pack_string;
c->unpack_string = (*(c->super))->unpack_string;
c->pack_string_array = (*(c->super))->pack_string_array;
c->unpack_string_array = (*(c->super))->unpack_string_array;
c->pack_bytes = (*(c->super))->pack_bytes;
c->unpack_bytes = (*(c->super))->unpack_bytes;
c->pack_expression = (*(c->super))->pack_expression;
c->notify_change = (*(c->super))->notify_change;
c->update_size = (*(c->super))->update_size;
c->preferred_size = (*(c->super))->preferred_size;
c->resize = (*(c->super))->resize;
c->nearest_smaller_value = (*(c->super))->nearest_smaller_value;
c->next = (*(c->super))->next;
c->compare = (*(c->super))->compare;
c->unpack_double_element = (*(c->super))->unpack_double_element;
c->unpack_double_subarray = (*(c->super))->unpack_double_subarray;
c->clear = (*(c->super))->clear;
c->make_clone = (*(c->super))->make_clone;
}
/* END_CLASS_IMP */
static void init(grib_accessor* a, const long len , grib_arguments* arg )
{
int n=0;
grib_accessor_bufr_extract_area_subsets *self =(grib_accessor_bufr_extract_area_subsets*)a;
a->length=0;
self->doExtractSubsets = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
self->numberOfSubsets = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
self->extractSubsetList = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
self->extractAreaWestLongitude = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
self->extractAreaEastLongitude = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
self->extractAreaNorthLatitude = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
self->extractAreaSouthLatitude = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
self->extractAreaLongitudeRank = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
self->extractAreaLatitudeRank = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION;
}
static int get_native_type(grib_accessor* a)
{
return GRIB_TYPE_LONG;
}
static int select_area(grib_accessor* a) {
int ret=0;
long compressed=0;
grib_accessor_bufr_extract_area_subsets *self =(grib_accessor_bufr_extract_area_subsets*)a;
grib_handle* h=grib_handle_of_accessor(a);
grib_context* c=h->context;
ret=grib_get_long(h,"compressedData",&compressed);
if (ret) return ret;
if (compressed) {
double *lat=0;
double *lon=0;
size_t n;
double lonWest,lonEast,latNorth,latSouth;
long numberOfSubsets,i,latRank,lonRank;
grib_iarray* subsets;
long *subsets_ar=0;
size_t nsubsets=0;
char latstr[20]={0,};
char lonstr[20]={0,};
ret=grib_get_long(h,self->numberOfSubsets,&numberOfSubsets);
if (ret) return ret;
subsets=grib_iarray_new(c,numberOfSubsets,10);
ret=grib_set_long(h,"unpack",1);
if (ret) return ret;
ret=grib_get_long(h,self->extractAreaLongitudeRank,&lonRank);
if (ret) return ret;
sprintf(lonstr,"#%ld#longitude",lonRank);
ret=grib_get_long(h,self->extractAreaLatitudeRank,&latRank);
if (ret) return ret;
sprintf(latstr,"#%ld#latitude",latRank);
n=numberOfSubsets;
lat=grib_context_malloc_clear(c,sizeof(double)*numberOfSubsets);
ret=grib_get_double_array(h,latstr,lat,&n);
if (ret) return ret;
if (n!=numberOfSubsets) return GRIB_INTERNAL_ERROR;
lon=grib_context_malloc_clear(c,sizeof(double)*numberOfSubsets);
ret=grib_get_double_array(h,lonstr,lon,&n);
if (ret) return ret;
if (n!=numberOfSubsets) return GRIB_INTERNAL_ERROR;
ret=grib_get_double(h,self->extractAreaWestLongitude,&lonWest);
if (ret) return ret;
ret=grib_get_double(h,self->extractAreaEastLongitude,&lonEast);
if (ret) return ret;
ret=grib_get_double(h,self->extractAreaNorthLatitude,&latNorth);
if (ret) return ret;
ret=grib_get_double(h,self->extractAreaSouthLatitude,&latSouth);
if (ret) return ret;
for (i=0;i<numberOfSubsets;i++) {
/* printf("++++++ lat: %g <= %g <= %g lon: %g <= %g <= %g \n",latSouth,lat[i],latNorth,lonWest,lon[i],lonEast); */
if (lat[i]>=latSouth && lat[i]<=latNorth && lon[i]>=lonWest && lon[i]<=lonEast) {
grib_iarray_push(subsets,i+1);
/* printf("++++++++ %ld\n",i+1); */
}
}
subsets_ar=grib_iarray_get_array(subsets);
nsubsets=grib_iarray_used_size(subsets);
ret=grib_set_long_array(h,self->extractSubsetList,subsets_ar,nsubsets);
if (ret) return ret;
ret=grib_set_long(h,self->doExtractSubsets,1);
if (ret) return ret;
grib_context_free(c,lat);
grib_context_free(c,lon);
grib_iarray_delete(subsets);
subsets=0;
} else {
return GRIB_NOT_IMPLEMENTED;
}
return ret;
}
static int pack_long(grib_accessor* a, const long* val, size_t *len)
{
int err=0;
grib_accessor_bufr_extract_area_subsets *self =(grib_accessor_bufr_extract_area_subsets*)a;
size_t l=1;
long v[1];
if (*len==0) return GRIB_SUCCESS;
err=select_area(a);
if (err) return err;
err=grib_set_long(a->parent->h,self->doExtractSubsets,1);
if (err) return err;
return err;
}

View File

@ -19,12 +19,8 @@
IMPLEMENTS = pack_long;
MEMBERS = const char* numericValues
MEMBERS = const char* pack
MEMBERS = const char* numberOfSubsets
MEMBERS = const char* subset
MEMBERS = grib_accessor* numericValuesAccessor
MEMBERS = grib_accessor* packAccessor
MEMBERS = grib_accessor* numberOfSubsetsAccessor
MEMBERS = grib_accessor* subsetAccessor
END_CLASS_DEF
*/
@ -50,12 +46,8 @@ typedef struct grib_accessor_bufr_extract_subsets {
/* Members defined in bufr_extract_subsets */
const char* numericValues;
const char* pack;
const char* numberOfSubsets;
const char* subset;
grib_accessor* numericValuesAccessor;
grib_accessor* packAccessor;
grib_accessor* numberOfSubsetsAccessor;
grib_accessor* subsetAccessor;
} grib_accessor_bufr_extract_subsets;
extern grib_accessor_class* grib_accessor_class_gen;
@ -151,8 +143,6 @@ static void get_accessors(grib_accessor* a)
if (self->packAccessor) return;
self->numericValuesAccessor=grib_find_accessor(h,self->numericValues);
self->packAccessor=grib_find_accessor(h,self->pack);
self->numberOfSubsetsAccessor=grib_find_accessor(h,self->numberOfSubsets);
self->subsetAccessor=grib_find_accessor(h,self->subset);
}
static void init(grib_accessor* a, const long len , grib_arguments* arg )
@ -163,8 +153,6 @@ static void init(grib_accessor* a, const long len , grib_arguments* arg )
a->length=0;
self->numericValues = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
self->pack = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
self->numberOfSubsets = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
self->subset = grib_arguments_get_name(grib_handle_of_accessor(a),arg,n++);
a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION;
}
@ -173,10 +161,6 @@ static int get_native_type(grib_accessor* a)
return GRIB_TYPE_LONG;
}
#define PROCESS_DECODE 0
#define PROCESS_NEW_DATA 1
#define PROCESS_ENCODE 2
static int pack_long(grib_accessor* a, const long* val, size_t *len)
{
int err=0;
@ -189,14 +173,6 @@ static int pack_long(grib_accessor* a, const long* val, size_t *len)
v[0]=1;
err=grib_pack_long(self->packAccessor,v,&l);
if (err) return err;
err=grib_unpack_long(self->subsetAccessor,v,&l);
if (err) return err;
/* this does not work at the moment, we need to fix it */
/* err=accessor_bufr_data_array_process_elements(self->numericValuesAccessor,PROCESS_ENCODE,v[0],0,0); */
/* v[0]=1; */
/* err=grib_pack_long(self->numberOfSubsetsAccessor,v,&l); */
/* if (err) return err; */
/* err=accessor_bufr_data_array_create_keys(self->numericValuesAccessor,extractSubset,0,0); */
return err;
}

View File

@ -16,6 +16,7 @@
{ "bufr_data_array", &grib_accessor_class_bufr_data_array, },
{ "bufr_data_element", &grib_accessor_class_bufr_data_element, },
{ "bufr_elements_table", &grib_accessor_class_bufr_elements_table, },
{ "bufr_extract_area_subsets", &grib_accessor_class_bufr_extract_area_subsets, },
{ "bufr_extract_subsets", &grib_accessor_class_bufr_extract_subsets, },
{ "bufr_group", &grib_accessor_class_bufr_group, },
{ "bufr_has_delayed_replication", &grib_accessor_class_bufr_has_delayed_replication, },

View File

@ -17,6 +17,7 @@ bufr_data_array, &grib_accessor_class_bufr_data_array
bufr_data_element, &grib_accessor_class_bufr_data_element
bufr_element, &grib_accessor_class_bufr_element
bufr_elements_table, &grib_accessor_class_bufr_elements_table
bufr_extract_area_subsets, &grib_accessor_class_bufr_extract_area_subsets
bufr_extract_subsets, &grib_accessor_class_bufr_extract_subsets
bufr_group, &grib_accessor_class_bufr_group
bufr_group_number, &grib_accessor_class_bufr_group_number

View File

@ -6,9 +6,9 @@ extern grib_dumper_class* grib_dumper_class_default;
extern grib_dumper_class* grib_dumper_class_file;
extern grib_dumper_class* grib_dumper_class_filter;
extern grib_dumper_class* grib_dumper_class_fortran;
extern grib_dumper_class* grib_dumper_class_python;
extern grib_dumper_class* grib_dumper_class_json;
extern grib_dumper_class* grib_dumper_class_keys;
extern grib_dumper_class* grib_dumper_class_python;
extern grib_dumper_class* grib_dumper_class_serialize;
extern grib_dumper_class* grib_dumper_class_string;
extern grib_dumper_class* grib_dumper_class_wmo;

View File

@ -4,9 +4,9 @@
{ "default", &grib_dumper_class_default, },
{ "filter", &grib_dumper_class_filter, },
{ "fortran", &grib_dumper_class_fortran, },
{ "python", &grib_dumper_class_python, },
{ "json", &grib_dumper_class_json, },
{ "keys", &grib_dumper_class_keys, },
{ "python", &grib_dumper_class_python, },
{ "serialize", &grib_dumper_class_serialize, },
{ "wmo", &grib_dumper_class_wmo, },
{ "xml", &grib_dumper_class_xml, },

View File

@ -1428,3 +1428,108 @@ do
done
rm -f $fLog
#-----------------------------------------------------------
# Test: Area extraction
#-----------------------------------------------------------
cat > $fRules <<EOF
transient originalNumberOfSubsets=numberOfSubsets;
set extractAreaNorthLatitude=52.5;
set extractAreaSouthLatitude=51.1;
set extractAreaWestLongitude=155.2;
set extractAreaEastLongitude=160.5;
set extractAreaLongitudeRank=1;
set doExtractArea=1;
write;
print "extracted [numberOfSubsets] of [originalNumberOfSubsets] subsets";
EOF
f="amsa_55.bufr"
echo "Test: Area extraction" >> $fLog
echo "file: $f" >> $fLog
${tools_dir}bufr_filter -o ${f}.out $fRules $f > ${f}.log
cat > $fRules <<EOF
set unpack=1;
print "latitude=[latitude!15]";
print "===========";
print "longitude=[longitude!15]";
print "===========";
print "second=[second!15]";
print "===========";
print "scanLineNumber=[scanLineNumber!15]";
print "===========";
print "fieldOfViewNumber=[fieldOfViewNumber!15]";
print "===========";
EOF
${tools_dir}bufr_filter $fRules $f ${f}.out >> ${f}.log
cat > ${f}.log.ref <<EOF
extracted 14 of 128 subsets
latitude=49.2875 49.8194 50.2426 50.5906 50.8842 51.1371 51.3586 51.5555 51.7329 51.8945 52.0434 52.1819 52.3118 52.4349 52.5523
52.6652 52.7746 52.8814 52.9863 53.0901 53.1934 53.2968 53.4009 53.5061 53.6127 53.7209 53.8303 53.9401 54.0476 54.1472
48.8597 49.3864 49.8055 50.1502 50.4409 50.6913 50.9107 51.1058 51.2815 51.4417 51.5892 51.7265 51.8553 51.9773 52.0937
52.2057 52.3142 52.4202 52.5244 52.6275 52.7302 52.833 52.9365 53.0413 53.1475 53.2555 53.365 53.475 53.5832 53.6842
48.4308 48.9524 49.3675 49.7089 49.9969 50.2449 50.4623 50.6555 50.8297 50.9884 51.1346 51.2706 51.3983 51.5193 51.6347
51.7459 51.8536 51.9588 52.0622 52.1647 52.2667 52.369 52.472 52.5763 52.6823 52.7901 52.8996 53.0099 53.1188 53.2211
48.0008 48.5175 48.9286 49.2668 49.5521 49.7978 50.0132 50.2047 50.3772 50.5346 50.6795 50.8143 50.941 51.0609 51.1755
51.2857 51.3926 51.4971 51.5998 51.7016 51.803 51.9048 52.0073 52.1112 52.2169 52.3245 52.434 52.5447 52.6543 52.758
47.5699 48.0817 48.489 48.824 49.1066 49.3501 49.5635 49.7533
===========
longitude=167.2984 165.6325 164.2137 162.9735 161.8672 160.8636 159.9403 159.0802 158.27 157.4991 156.7586 156.041 155.3397 154.6487 153.9623
153.2751 152.5816 151.8761 151.1526 150.4041 149.623 148.8001 147.9245 146.9823 145.9563 144.8234 143.5526 142.1003 140.4019 138.3564
166.9615 165.3065 163.8977 162.6667 161.569 160.5735 159.6579 158.8051 158.002 157.2381 156.5043 155.7934 155.0987 154.4143 153.7346
153.0542 152.3676 151.6693 150.9531 150.2123 149.4394 148.6252 147.7588 146.8268 145.8119 144.6914 143.4347 141.9985 140.3191 138.2966
166.6306 164.9864 163.5874 162.3655 161.2762 160.2887 159.3806 158.5351 157.739 156.9817 156.2546 155.5503 154.862 154.1841 153.5109
152.8371 152.1573 151.4659 150.7569 150.0237 149.2586 148.4529 147.5956 146.6734 145.6693 144.5609 143.3178 141.8974 140.2365 138.2363
166.3055 164.672 163.2827 162.0697 160.9887 160.009 159.1083 158.2699 157.4806 156.73 156.0094 155.3113 154.6295 153.9579 153.291
152.6237 151.9504 151.2658 150.5638 149.838 149.0807 148.2831 147.4347 146.5221 145.5286 144.4319 143.2021 141.7969 140.154 138.1756
165.9862 164.3631 162.9834 161.7792 160.7063 159.7343 158.8409 158.0094
===========
second=23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54
23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54 23.54
31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54
31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54 31.54
39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54
39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54 39.54
47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54
47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54 47.54
55.54 55.54 55.54 55.54 55.54 55.54 55.54 55.54
===========
scanLineNumber=266 266 266 266 266 266 266 266 266 266 266 266 266 266 266
266 266 266 266 266 266 266 266 266 266 266 266 266 266 266
267 267 267 267 267 267 267 267 267 267 267 267 267 267 267
267 267 267 267 267 267 267 267 267 267 267 267 267 267 267
268 268 268 268 268 268 268 268 268 268 268 268 268 268 268
268 268 268 268 268 268 268 268 268 268 268 268 268 268 268
269 269 269 269 269 269 269 269 269 269 269 269 269 269 269
269 269 269 269 269 269 269 269 269 269 269 269 269 269 269
270 270 270 270 270 270 270 270
===========
fieldOfViewNumber=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1 2 3 4 5 6 7 8
===========
latitude=51.3586 51.5555 51.7329 51.8945 52.0434 52.1819 52.3118 51.1058 51.2815 51.4417 51.5892 51.7265 51.1346 51.2706
===========
longitude=159.9403 159.0802 158.27 157.4991 156.7586 156.041 155.3397 158.8051 158.002 157.2381 156.5043 155.7934 156.2546 155.5503
===========
second=23.54 23.54 23.54 23.54 23.54 23.54 23.54 31.54 31.54 31.54 31.54 31.54 39.54 39.54
===========
scanLineNumber=266 266 266 266 266 266 266 267 267 267 267 267 268 268
===========
fieldOfViewNumber=7 8 9 10 11 12 13 8 9 10 11 12 11 12
===========
EOF
diff ${f}.log.ref ${f}.log
rm -f ${f}.log ${f}.log.ref ${f}.out $fLog $fRules