379 lines
10 KiB
C
379 lines
10 KiB
C
|
/* Structure to read ALOS signal data */
|
||
|
/*
|
||
|
Each structure has write control string (WCS)
|
||
|
and pointers (RVL) to aid in input and output.
|
||
|
RJM June 2007
|
||
|
|
||
|
*/
|
||
|
struct ALOS_image {
|
||
|
struct sardata_record *rec1;
|
||
|
struct sardata_descriptor *dfd;
|
||
|
struct sardata_record *rec2;
|
||
|
struct sardata_info *sdr;
|
||
|
};
|
||
|
|
||
|
/* beginning of short binary segment */
|
||
|
struct sardata_record {
|
||
|
int record_seq_no;
|
||
|
char record_subtype_code1;
|
||
|
char record_type_code1;
|
||
|
char record_subtype_code2;
|
||
|
char record_subtype_code3;
|
||
|
int record_length;
|
||
|
};
|
||
|
|
||
|
#define SARDATA_RECORD_WCS "*********** SAR FDR BINARY **********\n"\
|
||
|
"record_seq_no ==> %4x\n"\
|
||
|
"record_subtype_code1 ==> %1x\n"\
|
||
|
"record_type_code1 ==> %1x\n"\
|
||
|
"record_subtype_code2 ==> %1x\n"\
|
||
|
"record_subtype_code3 ==> %1x\n"\
|
||
|
"record_length ==> %4x\n\n"
|
||
|
|
||
|
#define SARDATA_RECORD_RVL(SP)\
|
||
|
(SP)->record_seq_no,\
|
||
|
(SP)->record_subtype_code1,\
|
||
|
(SP)->record_type_code1,\
|
||
|
(SP)->record_subtype_code2,\
|
||
|
(SP)->record_subtype_code3,\
|
||
|
(SP)->record_length
|
||
|
|
||
|
/* end of short binary segment */
|
||
|
|
||
|
/* beginning of data descriptor segment */
|
||
|
|
||
|
struct sardata_descriptor {
|
||
|
char ascii_ebcdic_flag[2];
|
||
|
char blank_1[2];
|
||
|
char format_doc_ID[12];
|
||
|
char format_control_level[2];
|
||
|
char file_design_descriptor[2];
|
||
|
char facility_soft_release[12];
|
||
|
char file_number[4];
|
||
|
char file_name[16];
|
||
|
char record_seq_loc_type_flag_1[4];
|
||
|
char record_seq_loc_type_flag_2[8];
|
||
|
char sequence_number_loc[4];
|
||
|
char record_code_loc_flag[4];
|
||
|
char record_code_loc[8];
|
||
|
char record_code_field_length[4];
|
||
|
char record_length_loc_flag[4];
|
||
|
char record_length_loc[8];
|
||
|
char record_length_field_length[4];
|
||
|
char blank_2[68];
|
||
|
char number_sar_data_records[6];
|
||
|
char sar_data_record_length[6];
|
||
|
char blank_3[24];
|
||
|
char num_bits_sample[4];
|
||
|
char num_sample_data_group[4];
|
||
|
char num_bytes_data_group[4];
|
||
|
char just_order_samples[4];
|
||
|
char num_sar_channels[4];
|
||
|
char num_lines_data_set[8];
|
||
|
char num_left_border_pixels[4];
|
||
|
char total_num_data_groups[8];
|
||
|
char num_right_border_pixels[4];
|
||
|
char num_top_border_lines[4];
|
||
|
char num_bottom_border_lines[4];
|
||
|
char interleave_indicator[4];
|
||
|
char num_physical_records_line[2];
|
||
|
char num_physical_records_multi_chan[2];
|
||
|
char num_bytes_prefix[4];
|
||
|
char num_bytes_SAR_data[8];
|
||
|
char num_bytes_suffix[4];
|
||
|
char pref_fix_repeat_flag[4];
|
||
|
char sample_data_lin_no[8];
|
||
|
char SAR_chan_num_loc[8];
|
||
|
char time_SAR_data_line[8];
|
||
|
char left_fill_count[8];
|
||
|
char right_fill_count[8];
|
||
|
char pad_pixels[4];
|
||
|
char blank_4[28];
|
||
|
char sar_data_line_qual_loc[8];
|
||
|
char calib_info_field_loc[8];
|
||
|
char gain_values_field_loc[8];
|
||
|
char bias_values_field_loc[8];
|
||
|
char sar_data_format_code_1[28];
|
||
|
char sar_data_format_code_2[4];
|
||
|
char num_left_fill_bits_pixel[4];
|
||
|
char num_right_fill_bits_pixel[4];
|
||
|
char max_range_pixel[8];
|
||
|
char blank_5[272];
|
||
|
};
|
||
|
|
||
|
#define SARDATA_DESCRIPTOR_WCS "*********** SAR DATA DESCRIPTOR**********\n"\
|
||
|
"ascii_ebcdic_flag ==> %.2s\n"\
|
||
|
"blank_1 ==> %.2s\n"\
|
||
|
"format_doc_ID ==> %.12s\n"\
|
||
|
"format_control_level ==> %.2s\n"\
|
||
|
"file_design_descriptor ==> %.2s\n"\
|
||
|
"facility_soft_release ==> %.12s\n"\
|
||
|
"file_number ==> %.4s\n"\
|
||
|
"file_name ==> %.16s\n"\
|
||
|
"record_seq_loc_type_flag_1 ==> %.4s\n"\
|
||
|
"record_seq_loc_type_flag_2 ==> %.8s\n"\
|
||
|
"sequence_number_loc ==> %.4s\n"\
|
||
|
"record_code_loc_flag ==> %.4s\n"\
|
||
|
"record_code_loc ==> %.8s\n"\
|
||
|
"record_code_field_length ==> %.4s\n"\
|
||
|
"record_length_loc_flag ==> %.4s\n"\
|
||
|
"record_length_loc ==> %.8s\n"\
|
||
|
"record_length_field_length ==> %.4s\n"\
|
||
|
"blank_2 ==> %.68s\n"\
|
||
|
"number_sar_data_records ==> %.6s\n"\
|
||
|
"sar_data_record_length ==> %.6s\n"\
|
||
|
"blank_3 ==> %.24s\n"\
|
||
|
"num_bits_sample ==> %.4s\n"\
|
||
|
"num_sample_data_group ==> %.4s\n"\
|
||
|
"num_bytes_data_group ==> %.4s\n"\
|
||
|
"just_order_samples ==> %.4s\n"\
|
||
|
"num_sar_channels ==> %.4s\n"\
|
||
|
"num_lines_data_set ==> %.8s\n"\
|
||
|
"num_left_border_pixels ==> %.4s\n"\
|
||
|
"total_num_data_groups ==> %.8s\n"\
|
||
|
"num_right_border_pixels ==> %.4s\n"\
|
||
|
"num_top_border_lines ==> %.4s\n"\
|
||
|
"num_bottom_border_lines ==> %.4s\n"\
|
||
|
"interleave_indicator ==> %.4s\n"\
|
||
|
"num_physical_records_line ==> %.2s\n"\
|
||
|
"num_physical_records_multi_chan ==> %.2s\n"\
|
||
|
"num_bytes_prefix ==> %.4s\n"\
|
||
|
"num_bytes_SAR_data ==> %.8s\n"\
|
||
|
"num_bytes_suffix ==> %.4s\n"\
|
||
|
"pref_fix_repeat_flag ==> %.4s\n"\
|
||
|
"sample_data_lin_no ==> %.8s\n"\
|
||
|
"SAR_chan_num_loc ==> %.8s\n"\
|
||
|
"time_SAR_data_line ==> %.8s\n"\
|
||
|
"left_fill_count ==> %.8s\n"\
|
||
|
"right_fill_count ==> %.8s\n"\
|
||
|
"pad_pixels ==> %.4s\n"\
|
||
|
"blank_4 ==> %.28s\n"\
|
||
|
"sar_data_line_qual_loc ==> %.8s\n"\
|
||
|
"calib_info_field_loc ==> %.8s\n"\
|
||
|
"gain_values_field_loc ==> %.8s\n"\
|
||
|
"bias_values_field_loc ==> %.8s\n"\
|
||
|
"sar_data_format_code_1 ==> %.28s\n"\
|
||
|
"sar_data_format_code_2 ==> %.4s\n"\
|
||
|
"num_left_fill_bits_pixel ==> %.4s\n"\
|
||
|
"num_right_fill_bits_pixel ==> %.4s\n"\
|
||
|
"max_range_pixel ==> %.8s\n"\
|
||
|
"blank_5 ==> %.272s\n"
|
||
|
|
||
|
#define SARDATA_DESCRIPTOR_RVL(SP)\
|
||
|
(SP)->ascii_ebcdic_flag,\
|
||
|
(SP)->blank_1,\
|
||
|
(SP)->format_doc_ID,\
|
||
|
(SP)->format_control_level,\
|
||
|
(SP)->file_design_descriptor,\
|
||
|
(SP)->facility_soft_release,\
|
||
|
(SP)->file_number,\
|
||
|
(SP)->file_name,\
|
||
|
(SP)->record_seq_loc_type_flag_1,\
|
||
|
(SP)->record_seq_loc_type_flag_2,\
|
||
|
(SP)->sequence_number_loc,\
|
||
|
(SP)->record_code_loc_flag,\
|
||
|
(SP)->record_code_loc,\
|
||
|
(SP)->record_code_field_length,\
|
||
|
(SP)->record_length_loc_flag,\
|
||
|
(SP)->record_length_loc,\
|
||
|
(SP)->record_length_field_length,\
|
||
|
(SP)->blank_2,\
|
||
|
(SP)->number_sar_data_records,\
|
||
|
(SP)->sar_data_record_length,\
|
||
|
(SP)->blank_3,\
|
||
|
(SP)->num_bits_sample,\
|
||
|
(SP)->num_sample_data_group,\
|
||
|
(SP)->num_bytes_data_group,\
|
||
|
(SP)->just_order_samples,\
|
||
|
(SP)->num_sar_channels,\
|
||
|
(SP)->num_lines_data_set,\
|
||
|
(SP)->num_left_border_pixels,\
|
||
|
(SP)->total_num_data_groups,\
|
||
|
(SP)->num_right_border_pixels,\
|
||
|
(SP)->num_top_border_lines,\
|
||
|
(SP)->num_bottom_border_lines,\
|
||
|
(SP)->interleave_indicator,\
|
||
|
(SP)->num_physical_records_line,\
|
||
|
(SP)->num_physical_records_multi_chan,\
|
||
|
(SP)->num_bytes_prefix,\
|
||
|
(SP)->num_bytes_SAR_data,\
|
||
|
(SP)->num_bytes_suffix,\
|
||
|
(SP)->pref_fix_repeat_flag,\
|
||
|
(SP)->sample_data_lin_no,\
|
||
|
(SP)->SAR_chan_num_loc,\
|
||
|
(SP)->time_SAR_data_line,\
|
||
|
(SP)->left_fill_count,\
|
||
|
(SP)->right_fill_count,\
|
||
|
(SP)->pad_pixels,\
|
||
|
(SP)->blank_4,\
|
||
|
(SP)->sar_data_line_qual_loc,\
|
||
|
(SP)->calib_info_field_loc,\
|
||
|
(SP)->gain_values_field_loc,\
|
||
|
(SP)->bias_values_field_loc,\
|
||
|
(SP)->sar_data_format_code_1,\
|
||
|
(SP)->sar_data_format_code_2,\
|
||
|
(SP)->num_left_fill_bits_pixel,\
|
||
|
(SP)->num_right_fill_bits_pixel,\
|
||
|
(SP)->max_range_pixel,\
|
||
|
(SP)->blank_5
|
||
|
|
||
|
struct sardata_info {
|
||
|
int sequence_number;
|
||
|
char subtype[4];
|
||
|
int record_length;
|
||
|
int data_line_number;
|
||
|
int data_record_index;
|
||
|
int n_left_fill_pixels;
|
||
|
int n_data_pixels;
|
||
|
int n_right_fill_pixels;
|
||
|
int sensor_update_flag;
|
||
|
int sensor_acquisition_year;
|
||
|
int sensor_acquisition_DOY;
|
||
|
int sensor_acquisition_msecs_day;
|
||
|
short channel_indicator;
|
||
|
short channel_code;
|
||
|
short transmit_polarization;
|
||
|
short receive_polarization;
|
||
|
int PRF;
|
||
|
int scan_ID;
|
||
|
short onboard_range_compress;
|
||
|
short chirp_type;
|
||
|
int chirp_length;
|
||
|
int chirp_constant_coeff;
|
||
|
int chirp_linear_coeff;
|
||
|
int chirp_quad_coeff;
|
||
|
char spare1[4];
|
||
|
char spare2[4];
|
||
|
int receiver_gain;
|
||
|
int nought_line_flag;
|
||
|
int elec_antenna_elevation_angle;
|
||
|
int mech_antenna_elevation_angle;
|
||
|
int elec_antenna_squint_angle;
|
||
|
int mech_antenna_squint_angle;
|
||
|
int slant_range;
|
||
|
int data_record_window_position;
|
||
|
char spare3[4];
|
||
|
short platform_update_flag;
|
||
|
int platform_latitude;
|
||
|
int platform_longitude;
|
||
|
int platform_altitude;
|
||
|
int platform_ground_speed;
|
||
|
int platform_velocity_x;
|
||
|
int platform_velocity_y;
|
||
|
int platform_velocity_z;
|
||
|
int platform_acc_x;
|
||
|
int platform_acc_y;
|
||
|
int platform_acc_z;
|
||
|
int platform_track_angle_1;
|
||
|
int platform_track_angle_2;
|
||
|
int platform_pitch_angle;
|
||
|
int platform_roll_angle;
|
||
|
int platform_yaw_angle;
|
||
|
char blank1[92];
|
||
|
int frame_counter;
|
||
|
char PALSAR_aux_data[100];
|
||
|
char blank2[24];
|
||
|
};
|
||
|
|
||
|
#define SARDATA__WCS "*********** SAR DATA DESCRIPTOR**********\n"\
|
||
|
"sequence_number ==> %d\n"\
|
||
|
"subtype ==> %.4s\n"\
|
||
|
"record_length ==> %d\n"\
|
||
|
"data_line_number ==> %d\n"\
|
||
|
"data_record_index ==> %d\n"\
|
||
|
"n_left_fill_pixels ==> %d\n"\
|
||
|
"n_data_pixels ==> %d\n"\
|
||
|
"n_right_fill_pixels ==> %d\n"\
|
||
|
"sensor_update_flag ==> %d\n"\
|
||
|
"sensor_acquisition_year ==> %d\n"\
|
||
|
"sensor_acquisition_DOY ==> %d\n"\
|
||
|
"sensor_acquisition_msecs_day ==> %d\n"\
|
||
|
"channel_indicator ==> %d\n"\
|
||
|
"channel_code ==> %d\n"\
|
||
|
"transmit_polarization ==> %d\n"\
|
||
|
"receive_polarization ==> %d\n"\
|
||
|
"PRF ==> %d\n"\
|
||
|
"scan_ID ==> %d\n"\
|
||
|
"onboard_range_compress ==> %d\n"\
|
||
|
"chirp_type ==> %d\n"\
|
||
|
"chirp_length ==> %d\n"\
|
||
|
"chirp_constant_coeff ==> %d\n"\
|
||
|
"chirp_linear_coeff ==> %d\n"\
|
||
|
"chirp_quad_coeff ==> %d\n"\
|
||
|
"receiver_gain ==> %d\n"\
|
||
|
"nought_line_flag ==> %d\n"\
|
||
|
"elec_antenna_elevation_angle ==> %d\n"\
|
||
|
"mech_antenna_elevation_angle ==> %d\n"\
|
||
|
"elec_antenna_squint_angle ==> %d\n"\
|
||
|
"mech_antenna_squint_angle ==> %d\n"\
|
||
|
"slant_range ==> %d\n"\
|
||
|
"data_record_window_position ==> %d\n"\
|
||
|
"platform_update_flag ==> %d\n"\
|
||
|
"platform_latitude ==> %d\n"\
|
||
|
"platform_longitude ==> %d\n"\
|
||
|
"platform_altitude ==> %d\n"\
|
||
|
"platform_ground_speed ==> %d\n"\
|
||
|
"platform_velocity_x ==> %d\n"\
|
||
|
"platform_velocity_y ==> %d\n"\
|
||
|
"platform_velocity_z ==> %d\n"\
|
||
|
"platform_acc_x ==> %d\n"\
|
||
|
"platform_acc_y ==> %d\n"\
|
||
|
"platform_acc_z ==> %d\n"\
|
||
|
"platform_track_angle_1 ==> %d\n"\
|
||
|
"platform_track_angle_2 ==> %d\n"\
|
||
|
"platform_pitch_angle ==> %d\n"\
|
||
|
"platform_roll_angle ==> %d\n"\
|
||
|
"platform_yaw_angle ==> %d\n"\
|
||
|
"frame_counter ==> %d\n"
|
||
|
|
||
|
#define SARDATA_RVL(SP)\
|
||
|
(SP).sequence_number,\
|
||
|
(SP).subtype,\
|
||
|
(SP).record_length,\
|
||
|
(SP).data_line_number,\
|
||
|
(SP).data_record_index,\
|
||
|
(SP).n_left_fill_pixels,\
|
||
|
(SP).n_data_pixels,\
|
||
|
(SP).n_right_fill_pixels,\
|
||
|
(SP).sensor_update_flag,\
|
||
|
(SP).sensor_acquisition_year,\
|
||
|
(SP).sensor_acquisition_DOY,\
|
||
|
(SP).sensor_acquisition_msecs_day,\
|
||
|
(SP).channel_indicator,\
|
||
|
(SP).channel_code,\
|
||
|
(SP).transmit_polarization,\
|
||
|
(SP).receive_polarization,\
|
||
|
(SP).PRF,\
|
||
|
(SP).scan_ID,\
|
||
|
(SP).onboard_range_compress,\
|
||
|
(SP).chirp_type,\
|
||
|
(SP).chirp_length,\
|
||
|
(SP).chirp_constant_coeff,\
|
||
|
(SP).chirp_linear_coeff,\
|
||
|
(SP).chirp_quad_coeff,\
|
||
|
(SP).receiver_gain,\
|
||
|
(SP).nought_line_flag,\
|
||
|
(SP).elec_antenna_elevation_angle,\
|
||
|
(SP).mech_antenna_elevation_angle,\
|
||
|
(SP).elec_antenna_squint_angle,\
|
||
|
(SP).mech_antenna_squint_angle,\
|
||
|
(SP).slant_range,\
|
||
|
(SP).data_record_window_position,\
|
||
|
(SP).platform_update_flag,\
|
||
|
(SP).platform_latitude,\
|
||
|
(SP).platform_longitude,\
|
||
|
(SP).platform_altitude,\
|
||
|
(SP).platform_ground_speed,\
|
||
|
(SP).platform_velocity_x,\
|
||
|
(SP).platform_velocity_y,\
|
||
|
(SP).platform_velocity_z,\
|
||
|
(SP).platform_acc_x,\
|
||
|
(SP).platform_acc_y,\
|
||
|
(SP).platform_acc_z,\
|
||
|
(SP).platform_track_angle_1,\
|
||
|
(SP).platform_track_angle_2,\
|
||
|
(SP).platform_pitch_angle,\
|
||
|
(SP).platform_roll_angle,\
|
||
|
(SP).platform_yaw_angle,\
|
||
|
(SP).frame_counter
|