diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.cpp b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.cpp index 257da1a21965fe0a8aa787de750a3ce6e201464c..88c370bef1ccb440f7cbce410e9a7989a39440f1 100644 --- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.cpp +++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.cpp @@ -19,6 +19,13 @@ // #include <AlosSarMapProjectionData.h>// #include <AlosSarFacilityData.h> +#include <ossim/base/ossimTrace.h> +#include <ossim/base/ossimKeywordlist.h> +#include <ossim/base/ossimKeywordNames.h> + +// Static trace for debugging +static ossimTrace traceDebug("ossimAlosSarLeader:debug"); + namespace ossimplugins { @@ -118,17 +125,154 @@ void AlosSarLeader::ClearRecords() _records.clear(); } +bool AlosSarLeader::saveState(ossimKeywordlist& kwl, + const char* prefix) const +{ + + static const char MODULE[] = "AlosSarLeader::saveState"; + + if (traceDebug()) + { + ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n"; + } + + bool result = true; + + char name[64]; + + kwl.add(prefix, ossimKeywordNames::TYPE_KW, "ossimAlosSarModel", true); + /* + * Adding metadata necessary to the sensor model in the keywordlist + */ + AlosSarFileDescriptor *leaderfiledesc = get_AlosSarFileDescriptor(); + if (leaderfiledesc != NULL) + { + kwl.add(prefix, "filename",leaderfiledesc->get_file_name().c_str(),true); + } + else + { + result = false; + } + + /* + * Adding metadata necessary to the sensor model in the keywordlist + */ + AlosSarDataSetSummary *datasetSummary = get_AlosSarDataSetSummary(); + if ( (datasetSummary != NULL) && (result == true) ) + { + kwl.add(prefix, "inp_sctim",(datasetSummary->get_inp_sctim()).c_str(),true); + kwl.add(prefix, "ellip_maj", datasetSummary->get_ellip_maj(),true); + kwl.add(prefix, "ellip_min", datasetSummary->get_ellip_min(),true); + kwl.add(prefix, "sc_lin", datasetSummary->get_sc_lin(),true); + kwl.add(prefix, "sc_pix", datasetSummary->get_sc_pix(),true); + kwl.add(prefix, "wave_length", datasetSummary->get_wave_length(),true); + kwl.add(prefix, "fr", datasetSummary->get_fr(),true); + kwl.add(prefix, "fa", datasetSummary->get_fa(),true); + kwl.add(prefix, "time_dir_pix", (datasetSummary->get_time_dir_pix()).c_str(),true); + kwl.add(prefix, "time_dir_lin", (datasetSummary->get_time_dir_lin()).c_str(),true); + kwl.add(prefix, "line_spacing", datasetSummary->get_line_spacing(),true); + kwl.add(prefix, "pix_spacing", datasetSummary->get_pix_spacing(),true); + kwl.add(prefix, "nlooks_az", datasetSummary->get_n_azilok(),true); + kwl.add(prefix, "n_rnglok", datasetSummary->get_n_rnglok(),true); + kwl.add(prefix, "zero_dop_range_time_f_pixel", datasetSummary->get_zero_dop_range_time_f_pixel(),true); + kwl.add(prefix, "zero_dop_range_time_c_pixel", datasetSummary->get_zero_dop_range_time_c_pixel(),true); + kwl.add(prefix, "zero_dop_range_time_l_pixel", datasetSummary->get_zero_dop_range_time_l_pixel(),true); + } + else + { + result = false; + } + AlosSarMapProjectionData *mapprojectiondata = get_AlosSarMapProjectionData(); + if ( (mapprojectiondata != NULL) && (result == true) ) + { + kwl.add(prefix, "map_proj_des",(mapprojectiondata->get_map_proj_des()).c_str(),true); + kwl.add(prefix, "num_lines",(double) mapprojectiondata->get_num_lines(),true); + kwl.add(prefix, "num_pix",(double) mapprojectiondata->get_num_pix_in_line(),true); + kwl.add(prefix, "first_line_first_pixel_lat",mapprojectiondata->get_first_line_first_pixel_lat(), true); + kwl.add(prefix, "first_line_first_pixel_lon",mapprojectiondata->get_first_line_first_pixel_lon(), true); + kwl.add(prefix, "first_line_last_pixel_lat",mapprojectiondata->get_first_line_last_pixel_lat(), true); + kwl.add(prefix, "first_line_last_pixel_lon",mapprojectiondata->get_first_line_last_pixel_lon(), true); + kwl.add(prefix, "last_line_first_pixel_lat",mapprojectiondata->get_last_line_first_pixel_lat(), true); + kwl.add(prefix, "last_line_first_pixel_lon",mapprojectiondata->get_last_line_first_pixel_lon(), true); + kwl.add(prefix, "last_line_last_pixel_lat",mapprojectiondata->get_last_line_last_pixel_lat(), true); + kwl.add(prefix, "last_line_last_pixel_lon",mapprojectiondata->get_last_line_last_pixel_lon(), true); + } + else + { + result = false; + } + + AlosSarPlatformPositionData *platformposition = get_AlosSarPlatformPositionData(); + if ( (mapprojectiondata != NULL) && (result == true) ) + { + kwl.add(prefix, "neph", platformposition->get_ndata(),true); + kwl.add(prefix, "eph_year", platformposition->get_year(),true); + kwl.add(prefix, "eph_month", platformposition->get_month(),true); + kwl.add(prefix, "eph_day", platformposition->get_day(),true); + kwl.add(prefix, "eph_gmt_day", platformposition->get_gmt_day(),true); + kwl.add(prefix, "eph_sec", platformposition->get_gmt_sec(),true); + kwl.add(prefix, "eph_hr_angle", platformposition->get_hr_angle(),true); + kwl.add(prefix, "eph_int", platformposition->get_data_int(),true); + + for (int i=0;i<platformposition->get_ndata();i++) + { + sprintf(name,"eph%i_posX",i); + kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_pos()[0],true); + sprintf(name,"eph%i_posY",i); + kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_pos()[1],true); + sprintf(name,"eph%i_posZ",i); + kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_pos()[2],true); + + sprintf(name,"eph%i_velX",i); + kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_vel()[0],true); + sprintf(name,"eph%i_velY",i); + kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_vel()[1],true); + sprintf(name,"eph%i_velZ",i); + kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_vel()[2],true); + } + } + else + { + result = false; + } + /* + * Adding metadata necessary to the sensor model in the keywordlist + */ + AlosSarFacilityData *facilitydata = get_AlosSarFacilityData(); + if ( (facilitydata != NULL) && (result == true) ) + { + kwl.add(prefix, "coef_ground_range_1",facilitydata->get_coef_ground_range_1(),true); + kwl.add(prefix, "coef_ground_range_2",facilitydata->get_coef_ground_range_2(),true); + kwl.add(prefix, "coef_ground_range_3",facilitydata->get_coef_ground_range_3(),true); + kwl.add(prefix, "coef_ground_range_4",facilitydata->get_coef_ground_range_4(),true); + } + else + { + result = false; + } + + + if (traceDebug()) + { + ossimNotify(ossimNotifyLevel_DEBUG) + << MODULE << " exit status = " << (result?"true":"false\n") + << std::endl; + } + + + return result; +} -AlosSarFacilityData * AlosSarLeader::get_AlosSarFacilityData() +AlosSarFacilityData * AlosSarLeader::get_AlosSarFacilityData() const { return (AlosSarFacilityData*)_records[AlosSarFacilityDataID]; } -AlosSarPlatformPositionData * AlosSarLeader::get_AlosSarPlatformPositionData() +AlosSarPlatformPositionData * AlosSarLeader::get_AlosSarPlatformPositionData() const { return (AlosSarPlatformPositionData*)_records[AlosSarPlatformPositionDataID]; } -/* AlosSarMapProjectionData * AlosSarLeader::get_AlosSarMapProjectionData() +/* AlosSarMapProjectionData * AlosSarLeader::get_AlosSarMapProjectionData() const { return (AlosSarMapProjectionData*)_records[AlosSarMapProjectionDataID]; } @@ -137,12 +281,12 @@ AlosSarPlatformPositionData * AlosSarLeader::get_AlosSarPlatformPositionData() //no map projection data -AlosSarDataSetSummary * AlosSarLeader::get_AlosSarDataSetSummary() +AlosSarDataSetSummary * AlosSarLeader::get_AlosSarDataSetSummary() const { return (AlosSarDataSetSummary*)_records[AlosSarDataSetSummaryID]; } -AlosSarFileDescriptor * AlosSarLeader::get_AlosSarFileDescriptor() +AlosSarFileDescriptor * AlosSarLeader::get_AlosSarFileDescriptor() const { return (AlosSarFileDescriptor*)_records[AlosSarFileDescriptorID]; } diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.h b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.h index 004f69820455569eb172e9ba2ed88f6c5ea66bc4..58d475bd694a03c01ba767ac4275e7bb9fe800e0 100644 --- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.h +++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.h @@ -19,9 +19,10 @@ #include "AlosSarMapProjectionData.h" #include "AlosSarPlatformPositionData.h" #include "AlosSarFacilityData.h" - #include <map> +class ossimKeywordlist; + namespace ossimplugins { @@ -72,11 +73,23 @@ public: * @brief Remove all the previous records from the AlosSarLeader */ void ClearRecords(); - AlosSarFacilityData * get_AlosSarFacilityData(); - AlosSarPlatformPositionData * get_AlosSarPlatformPositionData(); -// AlosSarMapProjectionData * get_AlosSarMapProjectionData(); - AlosSarDataSetSummary * get_AlosSarDataSetSummary(); - AlosSarFileDescriptor * get_AlosSarFileDescriptor(); + + + /** + * @brief Method to save object state to a keyword list. + * @param kwl Keyword list to save to. + * @param prefix added to keys when saved. + * @return true on success, false on error. + */ + virtual bool saveState(ossimKeywordlist& kwl, + const char* prefix=0) const; + + + AlosSarFacilityData * get_AlosSarFacilityData() const; + AlosSarPlatformPositionData * get_AlosSarPlatformPositionData() const; +// AlosSarMapProjectionData * get_AlosSarMapProjectionData() const; + AlosSarDataSetSummary * get_AlosSarDataSetSummary() const; + AlosSarFileDescriptor * get_AlosSarFileDescriptor() const; protected: std::map<int, AlosSarRecord*> _records;