ENVISAT Product Reader API for C

Data Structures | Macros | Typedefs | Enumerations | Functions
epr_api.h File Reference
#include <stdio.h>
#include "epr_ptrarray.h"

Go to the source code of this file.

Data Structures

struct  EPR_ProductId
 The EPR_ProductId structure contains information about an ENVISAT product file which has been opened with the epr_open_product() function. More...
 
struct  EPR_DatasetId
 The EPR_DatasetId structure contains information about a dataset within an ENVISAT product file which has been opened with the epr_open_product() API function. More...
 
struct  EPR_DSD
 The EPR_DSD structure contains information about the propertier of a dataset properties and its location within an ENVISAT product file. More...
 
struct  EPR_Record
 The EPR_Record structure represents a record instance read from an ENVISAT dataset. More...
 
struct  EPR_Field
 Represents a field within a record. More...
 
struct  EPR_Raster
 Represents a raster in which data will be stored. More...
 
struct  EPR_DatasetRef
 The EPR_DatasetRef structure represents the information from dddb
with the reference to data name (in dddb), field-name and index of the element in field-array, in which (by name) searchable values are located. More...
 
struct  EPR_FlagDef
 Represents a flag-field within a flag-record. More...
 
struct  EPR_BandId
 The EPR_BandId structure contains information about a band within an ENVISAT product file which has been opened with the epr_open_product() API function. More...
 
struct  EPR_Time
 Represents a binary time value field in ENVISAT records. More...
 

Macros

#define EPR_PRODUCT_API_NAME_STR   "ENVISAT Product Reader API"
 
#define EPR_PRODUCT_API_VERSION_STR   "2.3"
 
#define EPR_MAGIC_PRODUCT_ID   0xCAFFEE64
 
#define EPR_MAGIC_DATASET_ID   0xEFEABDCA
 
#define EPR_MAGIC_BAND_ID   0xFEC21ABD
 
#define EPR_MAGIC_RECORD   0x7BABACAE
 
#define EPR_MAGIC_FIELD   0xBA0BABBA
 
#define EPR_MAGIC_RASTER   0x0BABA0EB
 
#define EPR_MAGIC_FLAG_DEF   0xCABA11AD
 
#define TRUE   1
 
#define FALSE   0
 
#define EPR_PRODUCT_ID_STRLEN   48
 

Typedefs

typedef enum EPR_DataTypeId EPR_EDataTypeId
 
typedef enum EPR_ErrCode EPR_EErrCode
 
typedef enum EPR_LogLevel EPR_ELogLevel
 
typedef enum EPR_SampleModel EPR_ESampleModel
 
typedef enum EPR_ScalingMethod EPR_EScalingMethod
 
typedef struct EPR_ProductId EPR_SProductId
 
typedef struct EPR_DatasetId EPR_SDatasetId
 
typedef struct EPR_BandId EPR_SBandId
 
typedef struct EPR_Record EPR_SRecord
 
typedef struct EPR_RecordInfo EPR_SRecordInfo
 
typedef struct EPR_Field EPR_SField
 
typedef struct EPR_FieldInfo EPR_SFieldInfo
 
typedef struct EPR_DSD EPR_SDSD
 
typedef struct EPR_Raster EPR_SRaster
 
typedef struct EPR_FlagDef EPR_SFlagDef
 
typedef struct EPR_ParamElem EPR_SParamElem
 
typedef struct EPR_Time EPR_STime
 
typedef struct EPR_DatasetRef EPR_SDatasetRef
 
typedef struct EPR_BitmaskTerm EPR_SBitmaskTerm
 
typedef struct EPR_FlagSet EPR_SFlagSet
 
typedef void(* EPR_FErrHandler) (EPR_EErrCode err_code, const char *err_message)
 
typedef void(* EPR_FLogHandler) (EPR_ELogLevel log_level, const char *log_message)
 
typedef int epr_boolean
 
typedef unsigned char uchar
 
typedef unsigned short ushort
 
typedef unsigned int uint
 
typedef unsigned long ulong
 
typedef int EPR_Magic
 

Enumerations

enum  EPR_DataTypeId {
  e_tid_unknown = 0, e_tid_uchar = 1, e_tid_char = 2, e_tid_ushort = 3,
  e_tid_short = 4, e_tid_uint = 5, e_tid_int = 6, e_tid_float = 7,
  e_tid_double = 8, e_tid_string = 11, e_tid_spare = 13, e_tid_time = 21
}
 The EPR_DataTypeId enumeration lists all possible data types for field elements in ENVISAT dataset records. More...
 
enum  EPR_ErrCode {
  e_err_none = 0, e_err_null_pointer = 1, e_err_illegal_arg = 2, e_err_illegal_state = 3,
  e_err_out_of_memory = 4, e_err_index_out_of_range = 5, e_err_illegal_conversion = 6, e_err_illegal_data_type = 7,
  e_err_file_not_found = 101, e_err_file_access_denied = 102, e_err_file_read_error = 103, e_err_file_write_error = 104,
  e_err_file_open_failed = 105, e_err_file_close_failed = 106, e_err_api_not_initialized = 201, e_err_invalid_product_id = 203,
  e_err_invalid_record = 204, e_err_invalid_band = 205, e_err_invalid_raster = 206, e_err_invalid_dataset_name = 207,
  e_err_invalid_field_name = 208, e_err_invalid_record_name = 209, e_err_invalid_product_name = 210, e_err_invalid_band_name = 211,
  e_err_invalid_data_format = 212, e_err_invalid_value = 213, e_err_invalid_keyword_name = 214, e_err_unknown_endian_order = 216,
  e_err_flag_not_found = 301, e_err_invalid_ddbb_format = 402
}
 The EPR_ErrCode enumeration lists all possible error codes for the ENVISAT product reader API. More...
 
enum  EPR_LogLevel { e_log_debug = -1, e_log_info = 0, e_log_warning = 1, e_log_error = 2 }
 The EPR_LogLevel enumeration lists possible log levels for the ENVISAT product reader API. More...
 
enum  EPR_SampleModel {
  e_smod_1OF1 = 0, e_smod_1OF2 = 1, e_smod_2OF2 = 2, e_smod_3TOI = 3,
  e_smod_2TOF = 4
}
 
enum  EPR_ScalingMethod { e_smid_non = 0, e_smid_lin = 1, e_smid_log = 2 }
 

Functions

int epr_init_api (EPR_ELogLevel log_level, EPR_FLogHandler log_handler, EPR_FErrHandler err_handler)
 Initializes the ENVISAT product reader API. More...
 
void epr_close_api (void)
 Closes the ENVISAT product reader API by releasing all resources allocated by the API. More...
 
int epr_set_log_level (EPR_ELogLevel log_level)
 Sets the log level for the ENVISAT API. More...
 
void epr_set_log_handler (EPR_FLogHandler log_handler)
 Sets the log handler for the ENVISAT API. More...
 
void epr_log_message (EPR_ELogLevel log_level, const char *log_message)
 A default implementation for a logging function to be passed into the epr_init() function. More...
 
void epr_set_err_handler (EPR_FErrHandler err_handler)
 Sets the error handler for the ENVISAT API. More...
 
EPR_EErrCode epr_get_last_err_code (void)
 Gets the error code of the error that occured during the last API function call. More...
 
const char * epr_get_last_err_message (void)
 Gets the error message of the error that occured during the last API function call. More...
 
void epr_clear_err (void)
 Clears the last error. More...
 
EPR_SProductIdepr_open_product (const char *product_file_path)
 Opens the ENVISAT product file with the given file path,
reads MPH, SPH and all DSDs,
organized the table with parameter of line length and tie points number;
returns a file identifier for the product. More...
 
int epr_close_product (EPR_SProductId *product_id)
 Closes the ENVISAT product file determined by the given product identifier. More...
 
void epr_print_record (const EPR_SRecord *record, FILE *ostream)
 
void epr_print_field (const EPR_SField *field, FILE *ostream)
 
void epr_print_element (const EPR_SRecord *record, uint field_index, uint element_index, FILE *ostream)
 
void epr_dump_record (const EPR_SRecord *record)
 
void epr_dump_field (const EPR_SField *field)
 
void epr_dump_element (const EPR_SRecord *record, uint field_index, uint element_index)
 
uint epr_get_scene_width (const EPR_SProductId *product_id)
 Gets the product's scene width in pixels. More...
 
uint epr_get_scene_height (const EPR_SProductId *product_id)
 Gets the product's scene height in pixels. More...
 
uint epr_get_num_datasets (EPR_SProductId *product_id)
 Gets the number off all datasets contained in a product. More...
 
EPR_SDatasetIdepr_get_dataset_id_at (EPR_SProductId *product_id, uint index)
 Gets the dataset_id at the specified position within the product. More...
 
EPR_SDatasetIdepr_get_dataset_id (EPR_SProductId *product_id, const char *dataset_name)
 Gets the dataset_id coresponding to the specified dataset name. More...
 
const char * epr_get_dataset_name (EPR_SDatasetId *dataset_id)
 Gets the name of the dataset for the given dataset ID. More...
 
const char * epr_get_dsd_name (const EPR_SDatasetId *dataset_id)
 Gets the name of the dsd for the given dataset ID. More...
 
EPR_SRecordepr_get_mph (const EPR_SProductId *product_id)
 Gets the MPH record from the given product_id. More...
 
EPR_SRecordepr_get_sph (const EPR_SProductId *product_id)
 Gets the SPH record from the given product_id. More...
 
const EPR_SDSDepr_get_dsd (const EPR_SDatasetId *dataset_id)
 Gets the dataset descriptor (DSD) for the dataset specified by dataset_id. More...
 
uint epr_get_num_records (const EPR_SDatasetId *dataset_id)
 Gets the number of records of the dataset specified by dataset_id. More...
 
uint epr_get_num_dsds (const EPR_SProductId *product_id)
 
EPR_SDSDepr_get_dsd_at (const EPR_SProductId *product_id, uint dsd_index)
 
EPR_SRecordepr_create_record (EPR_SDatasetId *dataset_id)
 Creates a new, empty record with a structure compatible with the dataset specified by dataset_id. More...
 
EPR_SRecordepr_read_record (EPR_SDatasetId *dataset_id, uint record_index, EPR_SRecord *record)
 Reads a record of a dataset specified by dataset_id. More...
 
void epr_free_record (EPR_SRecord *record)
 Frees the memory allocated through the given record. More...
 
const EPR_SFieldepr_get_field (const EPR_SRecord *record, const char *field_name)
 Gets a field from the given record. More...
 
uint epr_get_num_fields (const EPR_SRecord *record)
 Gets the number of fields contained in the given record. More...
 
const EPR_SFieldepr_get_field_at (const EPR_SRecord *record, uint field_index)
 Gets a field at the specified position within the record. More...
 
const char * epr_get_field_unit (const EPR_SField *field)
 Gets the unit of the field. More...
 
const char * epr_get_field_description (const EPR_SField *field)
 Gets the description of the field. More...
 
uint epr_get_field_num_elems (const EPR_SField *field)
 Gets the number of elements of the field. More...
 
const char * epr_get_field_name (const EPR_SField *field)
 Gets the name of the field. More...
 
EPR_EDataTypeId epr_get_field_type (const EPR_SField *field)
 Gets the type of the field. More...
 
char epr_get_field_elem_as_char (const EPR_SField *field, uint elem_index)
 
uchar epr_get_field_elem_as_uchar (const EPR_SField *field, uint elem_index)
 
short epr_get_field_elem_as_short (const EPR_SField *field, uint elem_index)
 
ushort epr_get_field_elem_as_ushort (const EPR_SField *field, uint elem_index)
 
int epr_get_field_elem_as_int (const EPR_SField *field, uint elem_index)
 
uint epr_get_field_elem_as_uint (const EPR_SField *field, uint elem_index)
 
float epr_get_field_elem_as_float (const EPR_SField *field, uint elem_index)
 
double epr_get_field_elem_as_double (const EPR_SField *field, uint elem_index)
 
const EPR_STimeepr_get_field_elem_as_mjd (const EPR_SField *field)
 
const char * epr_get_field_elem_as_str (const EPR_SField *field)
 
const char * epr_get_field_elems_char (const EPR_SField *field)
 
const ucharepr_get_field_elems_uchar (const EPR_SField *field)
 
const short * epr_get_field_elems_short (const EPR_SField *field)
 
const ushortepr_get_field_elems_ushort (const EPR_SField *field)
 
const int * epr_get_field_elems_int (const EPR_SField *field)
 
const uintepr_get_field_elems_uint (const EPR_SField *field)
 
const float * epr_get_field_elems_float (const EPR_SField *field)
 
const double * epr_get_field_elems_double (const EPR_SField *field)
 
uint epr_copy_field_elems_as_ints (const EPR_SField *field, int *buffer, uint num_elems)
 
uint epr_copy_field_elems_as_uints (const EPR_SField *field, uint *buffer, uint num_elems)
 
uint epr_copy_field_elems_as_floats (const EPR_SField *field, float *buffer, uint num_elems)
 
uint epr_copy_field_elems_as_doubles (const EPR_SField *field, double *buffer, uint num_elems)
 
EPR_SRasterepr_create_compatible_raster (EPR_SBandId *band_id, uint source_width, uint source_height, uint source_step_x, uint source_step_y)
 Creates a raster which is compatible with the data type contained in the band identified by band_id. More...
 
EPR_SRasterepr_create_raster (EPR_EDataTypeId data_type, uint source_width, uint source_height, uint source_step_x, uint source_step_y)
 Creates a raster of the specified data type. More...
 
EPR_SRasterepr_create_bitmask_raster (uint source_width, uint source_height, uint source_step_x, uint source_step_y)
 Creates a raster to be used for reading bitmasks. More...
 
int epr_read_band_raster (EPR_SBandId *band_id, int offset_x, int offset_y, EPR_SRaster *raster)
 Reads (geo-)physical values of the given band of the specified source-region. More...
 
uint epr_get_raster_elem_size (const EPR_SRaster *raster)
 
void * epr_get_raster_elem_addr (const EPR_SRaster *raster, uint offset)
 
void * epr_get_raster_pixel_addr (const EPR_SRaster *raster, uint x, uint y)
 
void * epr_get_raster_line_addr (const EPR_SRaster *raster, uint y)
 
uint epr_get_raster_width (EPR_SRaster *raster)
 Gets the raster's scene width in pixels. More...
 
uint epr_get_raster_height (EPR_SRaster *raster)
 Gets the raster's scene height in pixels. More...
 
uint epr_get_num_bands (EPR_SProductId *product_id)
 Gets the number of all bands contained in a product. More...
 
EPR_SBandIdepr_get_band_id_at (EPR_SProductId *product_id, uint index)
 Gets the band ID at the specified position within the product. More...
 
EPR_SBandIdepr_get_band_id (EPR_SProductId *product_id, const char *band_name)
 Gets the band ID corresponding to the specified name. More...
 
const char * epr_get_band_name (EPR_SBandId *band_id)
 Gets the name of the band for the given band ID. More...
 
void epr_free_raster (EPR_SRaster *raster)
 Release the memory allocated through a raster. More...
 
uint epr_get_pixel_as_uint (const EPR_SRaster *raster, int x, int y)
 This group of functions is for getting the values of the elements of a raster (i.e. More...
 
int epr_get_pixel_as_int (const EPR_SRaster *raster, int x, int y)
 
float epr_get_pixel_as_float (const EPR_SRaster *raster, int x, int y)
 
double epr_get_pixel_as_double (const EPR_SRaster *raster, int x, int y)
 
int epr_read_bitmask_raster (EPR_SProductId *product_id, const char *bm_expr, int offset_x, int offset_y, EPR_SRaster *raster)
 Calculates a bit-mask, composed of flags of the given product and combined as described in the given bit-mask expression, for the a certain dimension and sub-sampling as defined in the given raster. More...
 
uint epr_get_data_type_size (EPR_EDataTypeId data_type_id)
 Gets the size in bytes for an element of the given data type. More...
 
const char * epr_data_type_id_to_str (EPR_EDataTypeId data_type_id)
 Gets the 'C' data type string for the given data type. More...
 

Macro Definition Documentation

◆ EPR_PRODUCT_API_NAME_STR

#define EPR_PRODUCT_API_NAME_STR   "ENVISAT Product Reader API"

◆ EPR_PRODUCT_API_VERSION_STR

#define EPR_PRODUCT_API_VERSION_STR   "2.3"

◆ EPR_MAGIC_PRODUCT_ID

#define EPR_MAGIC_PRODUCT_ID   0xCAFFEE64

◆ EPR_MAGIC_DATASET_ID

#define EPR_MAGIC_DATASET_ID   0xEFEABDCA

◆ EPR_MAGIC_BAND_ID

#define EPR_MAGIC_BAND_ID   0xFEC21ABD

◆ EPR_MAGIC_RECORD

#define EPR_MAGIC_RECORD   0x7BABACAE

◆ EPR_MAGIC_FIELD

#define EPR_MAGIC_FIELD   0xBA0BABBA

◆ EPR_MAGIC_RASTER

#define EPR_MAGIC_RASTER   0x0BABA0EB

◆ EPR_MAGIC_FLAG_DEF

#define EPR_MAGIC_FLAG_DEF   0xCABA11AD

◆ TRUE

#define TRUE   1

◆ FALSE

#define FALSE   0

◆ EPR_PRODUCT_ID_STRLEN

#define EPR_PRODUCT_ID_STRLEN   48

Typedef Documentation

◆ EPR_EDataTypeId

◆ EPR_EErrCode

typedef enum EPR_ErrCode EPR_EErrCode

◆ EPR_ELogLevel

◆ EPR_ESampleModel

◆ EPR_EScalingMethod

◆ EPR_SProductId

typedef struct EPR_ProductId EPR_SProductId

◆ EPR_SDatasetId

typedef struct EPR_DatasetId EPR_SDatasetId

◆ EPR_SBandId

typedef struct EPR_BandId EPR_SBandId

◆ EPR_SRecord

typedef struct EPR_Record EPR_SRecord

◆ EPR_SRecordInfo

typedef struct EPR_RecordInfo EPR_SRecordInfo

◆ EPR_SField

typedef struct EPR_Field EPR_SField

◆ EPR_SFieldInfo

typedef struct EPR_FieldInfo EPR_SFieldInfo

◆ EPR_SDSD

typedef struct EPR_DSD EPR_SDSD

◆ EPR_SRaster

typedef struct EPR_Raster EPR_SRaster

◆ EPR_SFlagDef

typedef struct EPR_FlagDef EPR_SFlagDef

◆ EPR_SParamElem

typedef struct EPR_ParamElem EPR_SParamElem

◆ EPR_STime

typedef struct EPR_Time EPR_STime

◆ EPR_SDatasetRef

◆ EPR_SBitmaskTerm

typedef struct EPR_BitmaskTerm EPR_SBitmaskTerm

◆ EPR_SFlagSet

typedef struct EPR_FlagSet EPR_SFlagSet

◆ EPR_FErrHandler

typedef void(* EPR_FErrHandler) (EPR_EErrCode err_code, const char *err_message)

◆ EPR_FLogHandler

typedef void(* EPR_FLogHandler) (EPR_ELogLevel log_level, const char *log_message)

◆ epr_boolean

typedef int epr_boolean

◆ uchar

typedef unsigned char uchar

◆ ushort

typedef unsigned short ushort

◆ uint

typedef unsigned int uint

◆ ulong

typedef unsigned long ulong

◆ EPR_Magic

typedef int EPR_Magic

Enumeration Type Documentation

◆ EPR_DataTypeId

The EPR_DataTypeId enumeration lists all possible data types for field elements in ENVISAT dataset records.

Enumerator
e_tid_unknown 

The ID for unknown types.

e_tid_uchar 

An array of unsigned 8-bit integers, C type is uchar*

e_tid_char 

An array of signed 8-bit integers, C type is char*

e_tid_ushort 

An array of unsigned 16-bit integers, C type is ushort*

e_tid_short 

An array of signed 16-bit integers, C type is short*

e_tid_uint 

An array of unsigned 32-bit integers, C type is uint*

e_tid_int 

An array of signed 32-bit integers, C type is int*

e_tid_float 

An array of 32-bit floating point numbers, C type is float*

e_tid_double 

An array of 64-bit floating point numbers, C type is double*

e_tid_string 

A zero-terminated ASCII string, C type is char*

e_tid_spare 

An array of unsigned character, C type is uchar*

e_tid_time 

A time (MJD) structure, C type is EPR_Time

◆ EPR_ErrCode

The EPR_ErrCode enumeration lists all possible error codes for the ENVISAT product reader API.

Enumerator
e_err_none 
e_err_null_pointer 
e_err_illegal_arg 
e_err_illegal_state 
e_err_out_of_memory 
e_err_index_out_of_range 
e_err_illegal_conversion 
e_err_illegal_data_type 
e_err_file_not_found 
e_err_file_access_denied 
e_err_file_read_error 
e_err_file_write_error 
e_err_file_open_failed 
e_err_file_close_failed 
e_err_api_not_initialized 
e_err_invalid_product_id 
e_err_invalid_record 
e_err_invalid_band 
e_err_invalid_raster 
e_err_invalid_dataset_name 
e_err_invalid_field_name 
e_err_invalid_record_name 
e_err_invalid_product_name 
e_err_invalid_band_name 
e_err_invalid_data_format 
e_err_invalid_value 
e_err_invalid_keyword_name 
e_err_unknown_endian_order 
e_err_flag_not_found 
e_err_invalid_ddbb_format 

◆ EPR_LogLevel

The EPR_LogLevel enumeration lists possible log levels for the ENVISAT product reader API.

Enumerator
e_log_debug 
e_log_info 
e_log_warning 
e_log_error 

◆ EPR_SampleModel

Enumerator
e_smod_1OF1 
e_smod_1OF2 
e_smod_2OF2 
e_smod_3TOI 
e_smod_2TOF 

◆ EPR_ScalingMethod

Enumerator
e_smid_non 
e_smid_lin 
e_smid_log 

Function Documentation

◆ epr_get_field_elem_as_char()

char epr_get_field_elem_as_char ( const EPR_SField field,
uint  elem_index 
)

◆ epr_get_field_elem_as_uchar()

uchar epr_get_field_elem_as_uchar ( const EPR_SField field,
uint  elem_index 
)

◆ epr_get_field_elem_as_short()

short epr_get_field_elem_as_short ( const EPR_SField field,
uint  elem_index 
)

◆ epr_get_field_elem_as_ushort()

ushort epr_get_field_elem_as_ushort ( const EPR_SField field,
uint  elem_index 
)

◆ epr_get_field_elem_as_int()

int epr_get_field_elem_as_int ( const EPR_SField field,
uint  elem_index 
)

◆ epr_get_field_elem_as_uint()

uint epr_get_field_elem_as_uint ( const EPR_SField field,
uint  elem_index 
)

◆ epr_get_field_elem_as_float()

float epr_get_field_elem_as_float ( const EPR_SField field,
uint  elem_index 
)

◆ epr_get_field_elem_as_double()

double epr_get_field_elem_as_double ( const EPR_SField field,
uint  elem_index 
)

◆ epr_get_field_elem_as_mjd()

const EPR_STime* epr_get_field_elem_as_mjd ( const EPR_SField field)

◆ epr_get_field_elem_as_str()

const char* epr_get_field_elem_as_str ( const EPR_SField field)

◆ epr_get_field_elems_char()

const char* epr_get_field_elems_char ( const EPR_SField field)

◆ epr_get_field_elems_uchar()

const uchar* epr_get_field_elems_uchar ( const EPR_SField field)

◆ epr_get_field_elems_short()

const short* epr_get_field_elems_short ( const EPR_SField field)

◆ epr_get_field_elems_ushort()

const ushort* epr_get_field_elems_ushort ( const EPR_SField field)

◆ epr_get_field_elems_int()

const int* epr_get_field_elems_int ( const EPR_SField field)

◆ epr_get_field_elems_uint()

const uint* epr_get_field_elems_uint ( const EPR_SField field)

◆ epr_get_field_elems_float()

const float* epr_get_field_elems_float ( const EPR_SField field)

◆ epr_get_field_elems_double()

const double* epr_get_field_elems_double ( const EPR_SField field)

◆ epr_copy_field_elems_as_ints()

uint epr_copy_field_elems_as_ints ( const EPR_SField field,
int *  buffer,
uint  num_elems 
)

◆ epr_copy_field_elems_as_uints()

uint epr_copy_field_elems_as_uints ( const EPR_SField field,
uint buffer,
uint  num_elems 
)

◆ epr_copy_field_elems_as_floats()

uint epr_copy_field_elems_as_floats ( const EPR_SField field,
float *  buffer,
uint  num_elems 
)

◆ epr_copy_field_elems_as_doubles()

uint epr_copy_field_elems_as_doubles ( const EPR_SField field,
double *  buffer,
uint  num_elems 
)

Generated on Sat Oct 24 2020 07:44:39

ENVISAT Product Reader C API

Written by Brockmann Consult, © 2002     Brockmann Consult      Eropean Space Agency