LCOV - code coverage report
Current view: directory - frmts/pcidsk/sdk/segment - orbitstructures.h (source / functions) Found Hit Coverage
Test: gdal_filtered.info Lines: 255 0 0.0 %
Date: 2012-04-28 Functions: 31 0 0.0 %

       1                 : /******************************************************************************
       2                 :  *
       3                 :  * Purpose: Support for storing and manipulating Orbit information
       4                 :  * 
       5                 :  ******************************************************************************
       6                 :  * Copyright (c) 2009
       7                 :  * PCI Geomatics, 50 West Wilmot Street, Richmond Hill, Ont, Canada
       8                 :  *
       9                 :  * Permission is hereby granted, free of charge, to any person obtaining a
      10                 :  * copy of this software and associated documentation files (the "Software"),
      11                 :  * to deal in the Software without restriction, including without limitation
      12                 :  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      13                 :  * and/or sell copies of the Software, and to permit persons to whom the
      14                 :  * Software is furnished to do so, subject to the following conditions:
      15                 :  *
      16                 :  * The above copyright notice and this permission notice shall be included
      17                 :  * in all copies or substantial portions of the Software.
      18                 :  *
      19                 :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
      20                 :  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      21                 :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
      22                 :  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      23                 :  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
      24                 :  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
      25                 :  * DEALINGS IN THE SOFTWARE.
      26                 :  ****************************************************************************/
      27                 : #ifndef __INCLUDE_PCIDSK_ORBIT_INFORMATION_H
      28                 : #define __INCLUDE_PCIDSK_ORBIT_INFORMATION_H
      29                 : 
      30                 : #include <string>
      31                 : #include <vector>
      32                 : 
      33                 : namespace PCIDSK
      34                 : {
      35                 : /* -------------------------------------------------------------------- */
      36                 : /*  Structure for ephemeris segment (ORBIT segment, type 160).  */
      37                 : /* -------------------------------------------------------------------- */
      38                 : #define EPHEMERIS_BLK   8
      39                 : #define EPHEMERIS_RADAR_BLK     10
      40                 : #define EPHEMERIS_ATT_BLK 9
      41                 : /* -------------------------------------------------------------------- */
      42                 : /*  Structure for Satellite Radar segment.        */
      43                 : /* -------------------------------------------------------------------- */
      44                 : #define ANC_DATA_PER_BLK  16
      45                 : #define ANC_DATA_SIZE   32
      46                 :     /**
      47                 :      * Ancillary data structure.
      48                 :      */
      49                 :     struct AncillaryData_t
      50               0 :     {
      51                 :         /**
      52                 :          * Default constrcutor
      53                 :          */
      54               0 :         AncillaryData_t()
      55                 :         {
      56               0 :         }
      57                 :         /**
      58                 :          * Copy constructor
      59                 :          * @param oAD the ancillary data to copy
      60                 :          */
      61               0 :         AncillaryData_t(const AncillaryData_t& oAD)
      62                 :         {
      63               0 :             Copy(oAD);
      64               0 :         }
      65                 : 
      66                 :         /**
      67                 :          * assignement operator
      68                 :          * @param oAD the ancillary data to assign
      69                 :          */
      70               0 :         AncillaryData_t& operator=(const AncillaryData_t& oAD)
      71                 :         {
      72               0 :             Copy(oAD);
      73               0 :             return *this;
      74                 :         }
      75                 : 
      76                 :         /**
      77                 :          * Copy function
      78                 :          * @param oAD the ancillary data to copy
      79                 :          */
      80               0 :         void Copy(const AncillaryData_t& oAD)
      81                 :         {
      82               0 :             if(this == &oAD)
      83                 :             {
      84               0 :                 return;
      85                 :             }
      86               0 :             SlantRangeFstPixel = oAD.SlantRangeFstPixel;  
      87               0 :             SlantRangeLastPixel = oAD.SlantRangeLastPixel;  
      88               0 :             FstPixelLat = oAD.FstPixelLat;    
      89               0 :             MidPixelLat = oAD.MidPixelLat;    
      90               0 :             LstPixelLat = oAD.LstPixelLat;    
      91               0 :             FstPixelLong = oAD.FstPixelLong;    
      92               0 :             MidPixelLong = oAD.MidPixelLong;    
      93               0 :             LstPixelLong = oAD.LstPixelLong;  
      94                 :         }
      95                 : 
      96                 :         int   SlantRangeFstPixel; /* Slant Range to First Pixel (m)      */
      97                 :         int   SlantRangeLastPixel;  /* Slant Range to Last Pixel (m)       */
      98                 :         float FstPixelLat;    /* First Pixel Latitude (millionths degrees) */
      99                 :         float MidPixelLat;    /* Mid Pixel Latitude (millionths degrees)   */
     100                 :         float LstPixelLat;    /* Last Pixel Latitude (millionths degrees)  */
     101                 :         float FstPixelLong;   /* First Pixel Longitude (millionths degrees)*/
     102                 :         float MidPixelLong;   /* Mid Pixel Longitude (millionths degrees)  */
     103                 :         float LstPixelLong;   /* Last Pixel Longitude (millionths degrees) */
     104                 :     } ;
     105                 : 
     106                 :     /**
     107                 :      * Radar segment information
     108                 :      */
     109                 :     struct RadarSeg_t
     110               0 :     {
     111                 :         /**
     112                 :          * Default constrcutor
     113                 :          */
     114               0 :         RadarSeg_t()
     115               0 :         {
     116               0 :         }
     117                 :         /**
     118                 :          * Copy constructor
     119                 :          * @param oRS the radar segment to copy
     120                 :          */
     121               0 :         RadarSeg_t(const RadarSeg_t& oRS)
     122               0 :         {
     123               0 :             Copy(oRS);
     124               0 :         }
     125                 : 
     126                 :         /**
     127                 :          * assignement operator
     128                 :          * @param oRS the radar segment to assign
     129                 :          */
     130                 :         RadarSeg_t& operator=(const RadarSeg_t& oRS)
     131                 :         {
     132                 :             Copy(oRS);
     133                 :             return *this;
     134                 :         }
     135                 : 
     136                 :         /**
     137                 :          * Copy function
     138                 :          * @param oRS the radar segment to copy
     139                 :          */
     140               0 :         void Copy(const RadarSeg_t& oRS)
     141                 :         {
     142               0 :             if(this == &oRS)
     143                 :             {
     144               0 :                 return;
     145                 :             }
     146               0 :             Identifier = oRS.Identifier;  
     147               0 :             Facility = oRS.Facility;  
     148               0 :             Ellipsoid = oRS.Ellipsoid;  
     149               0 :             EquatorialRadius = oRS.EquatorialRadius;    
     150               0 :             PolarRadius = oRS.PolarRadius;    
     151               0 :             IncidenceAngle = oRS.IncidenceAngle;  
     152               0 :             PixelSpacing = oRS.PixelSpacing;  
     153               0 :             LineSpacing = oRS.LineSpacing;    
     154               0 :             ClockAngle = oRS.ClockAngle;    
     155                 : 
     156               0 :             NumberBlockData = oRS.NumberBlockData;  
     157               0 :             NumberData = oRS.NumberData;    
     158                 : 
     159               0 :             Line = oRS.Line;  
     160                 :         }
     161                 : 
     162                 :         std::string   Identifier; /* Product identifier */
     163                 :         std::string   Facility; /* Processing facility */
     164                 :         std::string   Ellipsoid; /* Ellipsoid designator */
     165                 :         double EquatorialRadius; /* Equatorial radius of earth */
     166                 :         double PolarRadius; /* Polar radius of earth */
     167                 :         double IncidenceAngle; /* Incidence angle */
     168                 :         double PixelSpacing; /* Nominal pixel spacing in metre */
     169                 :         double LineSpacing; /* Nominal line spacing in metre */
     170                 :         double ClockAngle; /* Clock angle in degree */
     171                 : 
     172                 :         int    NumberBlockData; /* Number of blocks of ancillary data */
     173                 :         int  NumberData; /* Number of ancillary data */
     174                 : 
     175                 :         std::vector<AncillaryData_t> Line; /* Pointer to ancillary line */
     176                 :     } ;
     177                 : 
     178                 : /* -------------------------------------------------------------------- */
     179                 : /*  Structure for Satellite attitude segment.     */
     180                 : /* -------------------------------------------------------------------- */
     181                 : #define ATT_SEG_BLK   604
     182                 : #define ATT_SEG_MAX_LINE  6000
     183                 : #define ATT_SEG_LINE_PER_BLOCK  10
     184                 : 
     185                 :     /**
     186                 :      * Attitude line information
     187                 :      */
     188                 :     struct AttitudeLine_t
     189               0 :     {
     190                 :         /**
     191                 :          * Default constrcutor
     192                 :          */
     193               0 :         AttitudeLine_t()
     194                 :         {
     195               0 :         }
     196                 :         /**
     197                 :          * Copy constructor
     198                 :          * @param oAL the attitude line to copy
     199                 :          */
     200               0 :         AttitudeLine_t(const AttitudeLine_t& oAL)
     201                 :         {
     202               0 :             Copy(oAL);
     203               0 :         }
     204                 : 
     205                 :         /**
     206                 :          * assignement operator
     207                 :          * @param oAL the attitude line to assign
     208                 :          */
     209               0 :         AttitudeLine_t& operator=(const AttitudeLine_t& oAL)
     210                 :         {
     211               0 :             Copy(oAL);
     212               0 :             return *this;
     213                 :         }
     214                 : 
     215                 :         /**
     216                 :          * Copy function
     217                 :          * @param oAL the attitude line to copy
     218                 :          */
     219               0 :         void Copy(const AttitudeLine_t& oAL)
     220                 :         {
     221               0 :             if(this == &oAL)
     222                 :             {
     223               0 :                 return;
     224                 :             }
     225               0 :             ChangeInAttitude = oAL.ChangeInAttitude;
     226               0 :             ChangeEarthSatelliteDist = oAL.ChangeEarthSatelliteDist;
     227                 :         }
     228                 : 
     229                 :         double ChangeInAttitude; /* Change in satellite attiutde (D22.16) */
     230                 :         double ChangeEarthSatelliteDist; /* Change in earth-satellite distance
     231                 :                                          (D22.16) */
     232                 :     } ;
     233                 : 
     234                 :     /**
     235                 :      * Attitude segment information
     236                 :      */
     237                 :     struct AttitudeSeg_t
     238               0 :     {
     239                 :         /**
     240                 :          * Default constrcutor
     241                 :          */
     242               0 :         AttitudeSeg_t()
     243               0 :         {
     244               0 :         }
     245                 :         /**
     246                 :          * Copy constructor
     247                 :          * @param oAS the attitude segment to copy
     248                 :          */
     249               0 :         AttitudeSeg_t(const AttitudeSeg_t& oAS)
     250               0 :         {
     251               0 :             Copy(oAS);
     252               0 :         }
     253                 : 
     254                 :         /**
     255                 :          * assignement operator
     256                 :          * @param oAS the avhrr segment to assign
     257                 :          */
     258                 :         AttitudeSeg_t& operator=(const AttitudeSeg_t& oAS)
     259                 :         {
     260                 :             Copy(oAS);
     261                 :             return *this;
     262                 :         }
     263                 : 
     264                 :         /**
     265                 :          * Copy function
     266                 :          * @param oAS the avhrr segment to copy
     267                 :          */
     268               0 :         void Copy(const AttitudeSeg_t& oAS)
     269                 :         {
     270               0 :             if(this == &oAS)
     271                 :             {
     272               0 :                 return;
     273                 :             }
     274               0 :             Roll = oAS.Roll;
     275               0 :             Pitch = oAS.Pitch;
     276               0 :             Yaw = oAS.Yaw;
     277               0 :             NumberOfLine = oAS.NumberOfLine;
     278               0 :             NumberBlockData = oAS.NumberBlockData;
     279               0 :             Line = oAS.Line;
     280                 :         }
     281                 : 
     282                 :         double Roll; /* Roll (D22.16) */
     283                 :         double Pitch; /* Pitch (D22.16) */
     284                 :         double Yaw; /* Yaw (D22.16) */
     285                 :         int  NumberOfLine; /* No. of Lines (I22) */
     286                 : 
     287                 :         int NumberBlockData; /* No. of block of data. */
     288                 :         std::vector<AttitudeLine_t> Line;
     289                 : 
     290                 :     } ;
     291                 : 
     292                 : /* -------------------------------------------------------------------- */
     293                 : /*  AVHRR orbit segment. Composed of 11 blocks plus extra blocks  */
     294                 : /*  for holding per-scanline information.       */
     295                 : /* -------------------------------------------------------------------- */
     296                 : #define AVH_SEG_BASE_NUM_BLK  11
     297                 : 
     298                 :     /**
     299                 :      * Avhrr line information
     300                 :      */
     301                 :     struct AvhrrLine_t
     302               0 :     {
     303                 :         /**
     304                 :          * Default constrcutor
     305                 :          */
     306               0 :         AvhrrLine_t()
     307                 :         {
     308               0 :         }
     309                 :         /**
     310                 :          * Copy constructor
     311                 :          * @param oAL the avhrr line to copy
     312                 :          */
     313               0 :         AvhrrLine_t(const AvhrrLine_t& oAL)
     314                 :         {
     315               0 :             Copy(oAL);
     316               0 :         }
     317                 : 
     318                 :         /**
     319                 :          * assignement operator
     320                 :          * @param oAL the avhrr line to assign
     321                 :          */
     322               0 :         AvhrrLine_t& operator=(const AvhrrLine_t& oAL)
     323                 :         {
     324               0 :             Copy(oAL);
     325               0 :             return *this;
     326                 :         }
     327                 : 
     328                 :         /**
     329                 :          * Copy function
     330                 :          * @param oAL the avhrr line to copy
     331                 :          */
     332               0 :         void Copy(const AvhrrLine_t& oAL)
     333                 :         {
     334               0 :             if(this == &oAL)
     335                 :             {
     336               0 :                 return;
     337                 :             }
     338               0 :             nScanLineNum = oAL.nScanLineNum;
     339               0 :             nStartScanTimeGMTMsec = oAL.nStartScanTimeGMTMsec;
     340               0 :             for(int i=0 ; i < 10 ; i++)
     341               0 :                 abyScanLineQuality[i] = oAL.abyScanLineQuality[i];
     342               0 :             for(int i=0 ; i < 5 ; i++)
     343                 :             {
     344               0 :                 aabyBadBandIndicators[i][0] = oAL.aabyBadBandIndicators[i][0];
     345               0 :                 aabyBadBandIndicators[i][1] = oAL.aabyBadBandIndicators[i][1];
     346               0 :                 anSpaceScanData[i] = oAL.anSpaceScanData[i];
     347                 :             }
     348               0 :             for(int i=0 ; i < 8 ; i++)
     349               0 :                 abySatelliteTimeCode[i] = oAL.abySatelliteTimeCode[i];
     350               0 :             for(int i=0 ; i < 3 ; i++)
     351                 :             {
     352               0 :                 anTargetTempData[i] = oAL.anTargetTempData[i];
     353               0 :                 anTargetScanData[i] = oAL.anTargetScanData[i];
     354                 :             }
     355                 :         }
     356                 : 
     357                 :         /* For geocoding */
     358                 :         int   nScanLineNum;
     359                 :         int   nStartScanTimeGMTMsec;
     360                 :         unsigned char abyScanLineQuality[10];
     361                 :         unsigned char aabyBadBandIndicators[5][2];
     362                 :         unsigned char abySatelliteTimeCode[8];
     363                 : 
     364                 :         /* For thermal/IR calibration */
     365                 :         int   anTargetTempData[3];
     366                 :         int   anTargetScanData[3];
     367                 :         int   anSpaceScanData[5];
     368                 : 
     369                 :     } ;
     370                 : 
     371                 :     /**
     372                 :      * Avhrr segment information.
     373                 :      */
     374                 :     struct AvhrrSeg_t
     375               0 :     {
     376                 :         /**
     377                 :          * Default constrcutor
     378                 :          */
     379               0 :         AvhrrSeg_t()
     380               0 :         {
     381               0 :         }
     382                 :         /**
     383                 :          * Copy constructor
     384                 :          * @param oAS the avhrr segment to copy
     385                 :          */
     386               0 :         AvhrrSeg_t(const AvhrrSeg_t& oAS)
     387               0 :         {
     388               0 :             Copy(oAS);
     389               0 :         }
     390                 : 
     391                 :         /**
     392                 :          * assignement operator
     393                 :          * @param oAS the avhrr segment to assign
     394                 :          */
     395                 :         AvhrrSeg_t& operator=(const AvhrrSeg_t& oAS)
     396                 :         {
     397                 :             Copy(oAS);
     398                 :             return *this;
     399                 :         }
     400                 : 
     401                 :         /**
     402                 :          * Copy function
     403                 :          * @param oAS the avhrr segment to copy
     404                 :          */
     405               0 :         void Copy(const AvhrrSeg_t& oAS)
     406                 :         {
     407               0 :             if(this == &oAS)
     408                 :             {
     409               0 :                 return;
     410                 :             }
     411               0 :             szImageFormat = oAS.szImageFormat;
     412               0 :             nImageXSize = oAS.nImageXSize;
     413               0 :             nImageYSize = oAS.nImageYSize;
     414               0 :             bIsAscending = oAS.bIsAscending;
     415               0 :             bIsImageRotated = oAS.bIsImageRotated;
     416               0 :             szOrbitNumber = oAS.szOrbitNumber;
     417               0 :             szAscendDescendNodeFlag = oAS.szAscendDescendNodeFlag;
     418               0 :             szEpochYearAndDay = oAS.szEpochYearAndDay;
     419               0 :             szEpochTimeWithinDay = oAS.szEpochTimeWithinDay;
     420               0 :             szTimeDiffStationSatelliteMsec = oAS.szTimeDiffStationSatelliteMsec;
     421               0 :             szActualSensorScanRate = oAS.szActualSensorScanRate;
     422               0 :             szIdentOfOrbitInfoSource = oAS.szIdentOfOrbitInfoSource;
     423               0 :             szInternationalDesignator = oAS.szInternationalDesignator;
     424               0 :             szOrbitNumAtEpoch = oAS.szOrbitNumAtEpoch;
     425               0 :             szJulianDayAscendNode = oAS.szJulianDayAscendNode;
     426               0 :             szEpochYear = oAS.szEpochYear;
     427               0 :             szEpochMonth = oAS.szEpochMonth;
     428               0 :             szEpochDay = oAS.szEpochDay;
     429               0 :             szEpochHour = oAS.szEpochHour;
     430               0 :             szEpochMinute = oAS.szEpochMinute;
     431               0 :             szEpochSecond = oAS.szEpochSecond;
     432               0 :             szPointOfAriesDegrees = oAS.szPointOfAriesDegrees;
     433               0 :             szAnomalisticPeriod = oAS.szAnomalisticPeriod;
     434               0 :             szNodalPeriod = oAS.szNodalPeriod;
     435               0 :             szEccentricity = oAS.szEccentricity;
     436               0 :             szArgumentOfPerigee = oAS.szArgumentOfPerigee;
     437               0 :             szRAAN = oAS.szRAAN;
     438               0 :             szInclination = oAS.szInclination;
     439               0 :             szMeanAnomaly = oAS.szMeanAnomaly;
     440               0 :             szSemiMajorAxis = oAS.szSemiMajorAxis;
     441               0 :             nRecordSize = oAS.nRecordSize;
     442               0 :             nBlockSize = oAS.nBlockSize;
     443               0 :             nNumRecordsPerBlock = oAS.nNumRecordsPerBlock;
     444               0 :             nNumBlocks = oAS.nNumBlocks;
     445               0 :             nNumScanlineRecords = oAS.nNumScanlineRecords;
     446               0 :             Line = oAS.Line;
     447                 :         }
     448                 : 
     449                 :         /* Nineth Block Part 1 - General/header information */
     450                 :         std::string  szImageFormat;
     451                 :         int   nImageXSize;
     452                 :         int   nImageYSize;
     453                 :         bool bIsAscending;
     454                 :         bool bIsImageRotated;
     455                 : 
     456                 :         /* Nineth Block Part 2 - Ephemeris information */
     457                 :         std::string  szOrbitNumber;
     458                 :         std::string  szAscendDescendNodeFlag;
     459                 :         std::string  szEpochYearAndDay;
     460                 :         std::string  szEpochTimeWithinDay;
     461                 :         std::string  szTimeDiffStationSatelliteMsec;
     462                 :         std::string  szActualSensorScanRate;
     463                 :         std::string  szIdentOfOrbitInfoSource;
     464                 :         std::string  szInternationalDesignator;
     465                 :         std::string  szOrbitNumAtEpoch;
     466                 :         std::string  szJulianDayAscendNode;
     467                 :         std::string  szEpochYear;
     468                 :         std::string  szEpochMonth;
     469                 :         std::string  szEpochDay;
     470                 :         std::string  szEpochHour;
     471                 :         std::string  szEpochMinute;
     472                 :         std::string  szEpochSecond;
     473                 :         std::string  szPointOfAriesDegrees;
     474                 :         std::string  szAnomalisticPeriod;
     475                 :         std::string  szNodalPeriod;
     476                 :         std::string  szEccentricity;
     477                 :         std::string  szArgumentOfPerigee;
     478                 :         std::string  szRAAN;
     479                 :         std::string  szInclination;
     480                 :         std::string  szMeanAnomaly;
     481                 :         std::string  szSemiMajorAxis;
     482                 : 
     483                 :         /* 10th Block - Empty, reserved for future use */
     484                 : 
     485                 :         /* 11th Block - Needed for indexing 12th block onwards */
     486                 :         int   nRecordSize;
     487                 :         int   nBlockSize;
     488                 :         int   nNumRecordsPerBlock;
     489                 :         int   nNumBlocks;
     490                 :         int   nNumScanlineRecords;
     491                 : 
     492                 :         /* 12th Block and onwards - Per-scanline records */
     493                 :         std::vector<AvhrrLine_t> Line;
     494                 : 
     495                 :     } ;
     496                 : 
     497                 :     /**
     498                 :      * Possible orbit types.
     499                 :      */
     500                 :     typedef enum 
     501                 :     { 
     502                 :         OrbNone, 
     503                 :         OrbAttitude, 
     504                 :         OrbLatLong, 
     505                 :         OrbAvhrr 
     506                 :     } OrbitType;
     507                 : 
     508                 :     /**
     509                 :      * Ephemeris segment structure
     510                 :      */
     511                 :     struct EphemerisSeg_t
     512                 :     {
     513                 :         /**
     514                 :          * Default constrcutor
     515                 :          */
     516               0 :         EphemerisSeg_t()
     517               0 :         {
     518               0 :             AttitudeSeg = NULL;
     519               0 :             RadarSeg = NULL;
     520               0 :             AvhrrSeg = NULL;
     521               0 :         }
     522                 : 
     523                 :         /**
     524                 :          * Destructor
     525                 :          */
     526               0 :         ~EphemerisSeg_t()
     527                 :         {
     528               0 :             delete AttitudeSeg;
     529               0 :             delete RadarSeg;
     530               0 :             delete AvhrrSeg;
     531               0 :         }
     532                 : 
     533                 :         /**
     534                 :          * Copy constructor
     535                 :          * @param oES the ephemeris segment to copy
     536                 :          */
     537               0 :         EphemerisSeg_t(const EphemerisSeg_t& oES)
     538               0 :         {
     539               0 :             AttitudeSeg = NULL;
     540               0 :             RadarSeg = NULL;
     541               0 :             AvhrrSeg = NULL;
     542               0 :             Copy(oES);
     543               0 :         }
     544                 : 
     545                 :         /**
     546                 :          * assignement operator
     547                 :          * @param oES the ephemeris segment to assign
     548                 :          */
     549                 :         EphemerisSeg_t& operator=(const EphemerisSeg_t& oES)
     550                 :         {
     551                 :             Copy(oES);
     552                 :             return *this;
     553                 :         }
     554                 : 
     555                 :         /**
     556                 :          * Copy function
     557                 :          * @param oES the ephemeris segment to copy
     558                 :          */
     559               0 :         void Copy(const EphemerisSeg_t& oES)
     560                 :         {
     561               0 :             if(this == &oES)
     562                 :             {
     563               0 :                 return;
     564                 :             }
     565               0 :             delete AttitudeSeg;
     566               0 :             delete RadarSeg;
     567               0 :             delete AvhrrSeg;
     568               0 :             AttitudeSeg = NULL;
     569               0 :             RadarSeg = NULL;
     570               0 :             AvhrrSeg = NULL;
     571               0 :             if(oES.AttitudeSeg)
     572               0 :                 AttitudeSeg = new AttitudeSeg_t(*oES.AttitudeSeg);
     573               0 :             if(oES.RadarSeg)
     574               0 :                 RadarSeg = new RadarSeg_t(*oES.RadarSeg);
     575               0 :             if(oES.AvhrrSeg)
     576               0 :                 AvhrrSeg = new AvhrrSeg_t(*oES.AvhrrSeg);
     577                 : 
     578               0 :             for(int i =0 ; i <39 ; i++)
     579               0 :                 SPCoeff1B[i] = oES.SPCoeff1B[i];
     580               0 :             for(int i =0 ; i <4 ; i++)
     581               0 :                 SPCoeffSg[i] = oES.SPCoeffSg[i];
     582                 : 
     583               0 :             SatelliteDesc = oES.SatelliteDesc;
     584               0 :             SceneID = oES.SceneID;
     585               0 :             SatelliteSensor = oES.SatelliteSensor;
     586               0 :             SensorNo = oES.SensorNo;
     587               0 :             DateImageTaken = oES.DateImageTaken;
     588               0 :             SupSegExist = oES.SupSegExist;
     589               0 :             FieldOfView = oES.FieldOfView;
     590               0 :             ViewAngle = oES.ViewAngle;
     591               0 :             NumColCentre = oES.NumColCentre;
     592               0 :             RadialSpeed = oES.RadialSpeed;
     593               0 :             Eccentricity = oES.Eccentricity;
     594               0 :             Height = oES.Height;
     595               0 :             Inclination = oES.Inclination;
     596               0 :             TimeInterval = oES.TimeInterval;
     597               0 :             NumLineCentre = oES.NumLineCentre;
     598               0 :             LongCentre = oES.LongCentre;
     599               0 :             AngularSpd = oES.AngularSpd;
     600               0 :             AscNodeLong = oES.AscNodeLong;
     601               0 :             ArgPerigee = oES.ArgPerigee;
     602               0 :             LatCentre = oES.LatCentre;
     603               0 :             EarthSatelliteDist = oES.EarthSatelliteDist;
     604               0 :             NominalPitch = oES.NominalPitch;
     605               0 :             TimeAtCentre = oES.TimeAtCentre;
     606               0 :             SatelliteArg = oES.SatelliteArg;
     607               0 :             XCentre = oES.XCentre;
     608               0 :             YCentre = oES.YCentre;
     609               0 :             UtmYCentre = oES.UtmYCentre;
     610               0 :             UtmXCentre = oES.UtmXCentre;
     611               0 :             PixelRes = oES.PixelRes;
     612               0 :             LineRes = oES.LineRes;
     613               0 :             CornerAvail = oES.CornerAvail;
     614               0 :             MapUnit = oES.MapUnit;
     615               0 :             XUL = oES.XUL;
     616               0 :             YUL = oES.YUL;
     617               0 :             XUR = oES.XUR;
     618               0 :             YUR = oES.YUR;
     619               0 :             XLR = oES.XLR;
     620               0 :             YLR = oES.YLR;
     621               0 :             XLL = oES.XLL;
     622               0 :             YLL = oES.YLL;
     623               0 :             UtmYUL = oES.UtmYUL;
     624               0 :             UtmXUL = oES.UtmXUL;
     625               0 :             UtmYUR = oES.UtmYUR;
     626               0 :             UtmXUR = oES.UtmXUR;
     627               0 :             UtmYLR = oES.UtmYLR;
     628               0 :             UtmXLR = oES.UtmXLR;
     629               0 :             UtmYLL = oES.UtmYLL;
     630               0 :             UtmXLL = oES.UtmXLL;
     631               0 :             LatCentreDeg = oES.LatCentreDeg;
     632               0 :             LongCentreDeg = oES.LongCentreDeg;
     633               0 :             LatUL = oES.LatUL;
     634               0 :             LongUL = oES.LongUL;
     635               0 :             LatUR = oES.LatUR;
     636               0 :             LongUR = oES.LongUR;
     637               0 :             LatLR = oES.LatLR;
     638               0 :             LongLR = oES.LongLR;
     639               0 :             LatLL = oES.LatLL;
     640               0 :             LongLL = oES.LongLL;
     641               0 :             HtCentre = oES.HtCentre;
     642               0 :             HtUL = oES.HtUL;
     643               0 :             HtUR = oES.HtUR;
     644               0 :             HtLR = oES.HtLR;
     645               0 :             HtLL = oES.HtLL;
     646               0 :             ImageRecordLength = oES.ImageRecordLength;
     647               0 :             NumberImageLine = oES.NumberImageLine;
     648               0 :             NumberBytePerPixel = oES.NumberBytePerPixel;
     649               0 :             NumberSamplePerLine = oES.NumberSamplePerLine;
     650               0 :             NumberPrefixBytes = oES.NumberPrefixBytes;
     651               0 :             NumberSuffixBytes = oES.NumberSuffixBytes;
     652               0 :             SPNCoeff = oES.SPNCoeff;
     653               0 :             bDescending = oES.bDescending;
     654               0 :             Type = oES.Type;
     655                 :         }
     656                 : 
     657                 :         /// Satellite description
     658                 :         std::string SatelliteDesc;
     659                 :         /// Scene ID
     660                 :         std::string SceneID;
     661                 : 
     662                 :         /// Satellite sensor
     663                 :         std::string SatelliteSensor;
     664                 :         /// Satellite sensor no.
     665                 :         std::string SensorNo;   
     666                 :         /// Date of image taken
     667                 :         std::string DateImageTaken;
     668                 :         /// Flag to indicate supplemental segment
     669                 :         bool SupSegExist;
     670                 :         /// Scanner field of view (ALPHA)
     671                 :         double FieldOfView;
     672                 :         /// Viewing angle (BETA)
     673                 :         double ViewAngle;
     674                 :         /// Number of column at center (C0)
     675                 :         double NumColCentre;
     676                 :         /// Radial speed (DELIRO)
     677                 :         double RadialSpeed;
     678                 :         /// Eccentricity (ES)
     679                 :         double Eccentricity;
     680                 :         /// Height (H0)
     681                 :         double Height;
     682                 :         /// Inclination (I)
     683                 :         double Inclination;
     684                 :         /// Time interval (K)
     685                 :         double TimeInterval;
     686                 :         /// Number of line at center (L0)
     687                 :         double NumLineCentre;
     688                 :         /// Longitude of center (LAMBDA)
     689                 :         double LongCentre;
     690                 :         /// Angular speed (N)
     691                 :         double AngularSpd;
     692                 :         /// Ascending node Longitude (OMEGA-MAJ)
     693                 :         double AscNodeLong; 
     694                 :         /// Argument Perigee (OMEGA-MIN)
     695                 :         double ArgPerigee;
     696                 :         /// Latitude of center (PHI)
     697                 :         double LatCentre;
     698                 :         /// Earth Satellite distance (RHO)
     699                 :         double EarthSatelliteDist;
     700                 :         /// Nominal pitch (T)
     701                 :         double NominalPitch;
     702                 :         /// Time at centre (T0)
     703                 :         double TimeAtCentre;
     704                 :         /// Satellite argument (WP)
     705                 :         double SatelliteArg;
     706                 : 
     707                 :         /// Scene center pixel coordinate
     708                 :         double XCentre;
     709                 :         /// Scene center line coordinate
     710                 :         double YCentre;
     711                 :         /// Scene centre UTM northing
     712                 :         double UtmYCentre;
     713                 :         /// Scene centre UTM easting
     714                 :         double UtmXCentre;
     715                 :         /// Pixel resolution in x direction
     716                 :         double PixelRes;
     717                 :         /// Pixel resolution in y direction
     718                 :         double LineRes;
     719                 :         /// Flag to tell corner coordinate available
     720                 :         bool CornerAvail;
     721                 :         /// Map units
     722                 :         std::string MapUnit;
     723                 :         /// Pixel coordinate of upper left corner
     724                 :         double XUL;
     725                 :         /// Line coordinate of upper left corner
     726                 :         double YUL;
     727                 :         /// Pixel coordinate of upper right corner
     728                 :         double XUR;
     729                 :         /// Line coordinate of upper right corner
     730                 :         double YUR;
     731                 :         /// Pixel coordinate of lower right corner
     732                 :         double XLR;
     733                 :         /// Line coordinate of lower right corner
     734                 :         double YLR;
     735                 :         /// Pixel coordinate of lower left corner
     736                 :         double XLL;
     737                 :         /// Line coordinate of lower left corner
     738                 :         double YLL;
     739                 :         /// UTM Northing of upper left corner
     740                 :         double UtmYUL;
     741                 :         /// UTM Easting of upper left corner
     742                 :         double UtmXUL;
     743                 :         /// UTM Northing of upper right corner
     744                 :         double UtmYUR;
     745                 :         /// UTM Easting of upper right corner
     746                 :         double UtmXUR;
     747                 :         /// UTM Northing of lower right corner
     748                 :         double UtmYLR;
     749                 :         /// UTM Easting of lower right corner
     750                 :         double UtmXLR;
     751                 :         /// Utm Northing of lower left corner
     752                 :         double UtmYLL;
     753                 :         /// Utm Easting of lower left corner
     754                 :         double UtmXLL;
     755                 : 
     756                 :         /// Scene centre latitude (deg)
     757                 :         double LatCentreDeg;
     758                 :         /// Scene centre longitude (deg)
     759                 :         double LongCentreDeg;
     760                 :         /// Upper left latitude (deg)
     761                 :         double LatUL;
     762                 :         /// Upper left longitude (deg)
     763                 :         double LongUL;
     764                 :         /// Upper right latitude (deg)
     765                 :         double LatUR;
     766                 :         /// Upper right longitude (deg)
     767                 :         double LongUR;
     768                 :         /// Lower right latitude (deg)
     769                 :         double LatLR;
     770                 :         /// Lower right longitude (deg)
     771                 :         double LongLR;
     772                 :         /// Lower left latitude (deg)
     773                 :         double LatLL;
     774                 :         /// Lower left longitude (deg)
     775                 :         double LongLL;
     776                 :         /// Centre Height (m)
     777                 :         double HtCentre;
     778                 :         /// UL Height (m)
     779                 :         double HtUL;
     780                 :         /// UR Height (m)
     781                 :         double HtUR;
     782                 :         /// LR Height (m)
     783                 :         double HtLR;
     784                 :         /// LL Height (m)
     785                 :         double HtLL;
     786                 : 
     787                 :         /// SPOT 1B coefficients
     788                 :         double SPCoeff1B[39];
     789                 :         /// SPOT 1B segment coefficients
     790                 :         int    SPCoeffSg[4];
     791                 : 
     792                 :         /// Image record length
     793                 :         int    ImageRecordLength;
     794                 :         /// Number of image line
     795                 :         int    NumberImageLine;
     796                 :         /// Number of bytes per pixel
     797                 :         int    NumberBytePerPixel;
     798                 :         /// Number of samples per line
     799                 :         int    NumberSamplePerLine;
     800                 :         /// Number of prefix bytes
     801                 :         int    NumberPrefixBytes;
     802                 :         /// Number of suffix bytes
     803                 :         int    NumberSuffixBytes;
     804                 :         /// Number of coefficients for SPOT 1B
     805                 :         int    SPNCoeff;
     806                 : 
     807                 :         /// Flag to indicate ascending or descending
     808                 :         bool  bDescending;
     809                 : 
     810                 :         /// Orbit type: None, LatLong, Attitude, Avhrr
     811                 :         OrbitType   Type;
     812                 :         AttitudeSeg_t *AttitudeSeg;
     813                 :         RadarSeg_t    *RadarSeg;
     814                 :         AvhrrSeg_t    *AvhrrSeg;
     815                 :     };
     816                 : 
     817                 :     /**
     818                 :      * List of sensor type
     819                 :      */
     820                 :     typedef enum {PLA_1, MLA_1, PLA_2, MLA_2, PLA_3, MLA_3, PLA_4, MLA_4,
     821                 :     ASTER, SAR, LISS_1, LISS_2, LISS_3, LISS_L3, LISS_L3_L2,
     822                 :     LISS_L4, LISS_L4_L2, LISS_P3, LISS_P3_L2, LISS_W3, LISS_W3_L2,
     823                 :     LISS_AWF, LISS_AWF_L2, LISS_M3, EOC, IRS_1, RSAT_FIN, 
     824                 :     RSAT_STD, ERS_1, ERS_2, TM, ETM, IKO_PAN, IKO_MULTI, 
     825                 :     ORBVIEW_PAN, ORBVIEW_MULTI, OV3_PAN_BASIC, OV3_PAN_GEO, 
     826                 :     OV3_MULTI_BASIC, OV3_MULTI_GEO, OV5_PAN_BASIC, OV5_PAN_GEO, 
     827                 :     OV5_MULTI_BASIC, OV5_MULTI_GEO, QBIRD_PAN, QBIRD_PAN_STD, 
     828                 :     QBIRD_PAN_STH, QBIRD_MULTI, QBIRD_MULTI_STD, QBIRD_MULTI_STH, 
     829                 :     FORMOSAT_PAN, FORMOSAT_MULTI, FORMOSAT_PAN_L2,
     830                 :     FORMOSAT_MULTIL2, SPOT5_PAN_2_5, SPOT5_PAN_5, SPOT5_HRS,
     831                 :     SPOT5_MULTI, MERIS_FR, MERIS_RR, MERIS_LR, ASAR, EROS, 
     832                 :     MODIS_250, MODIS_500, MODIS_1000, CBERS_HRC, CBERS_HRC_L2,
     833                 :     CBERS_CCD, CBERS_CCD_L2, CBERS_IRM_80, CBERS_IRM_80_L2, 
     834                 :           CBERS_IRM_160, CBERS_IRM_160_L2, CBERS_WFI, CBERS_WFI_L2, 
     835                 :     CARTOSAT1_L1, CARTOSAT1_L2, ALOS_PRISM_L1, ALOS_PRISM_L2, 
     836                 :     ALOS_AVNIR_L1, ALOS_AVNIR_L2, PALSAR, DMC_1R, DMC_1T, 
     837                 :     KOMPSAT2_PAN, KOMPSAT2_MULTI, TERRASAR, WVIEW_PAN,
     838                 :     WVIEW_PAN_STD, WVIEW_MULTI, WVIEW_MULTI_STD,
     839                 :     RAPIDEYE_L1B, THEOS_PAN_L1, THEOS_PAN_L2,
     840                 :     THEOS_MS_L1, THEOS_MS_L2, 
     841                 :     GOSAT_500_L1, GOSAT_500_L2, GOSAT_1500_L1, GOSAT_1500_L2, 
     842                 :     HJ_CCD_1A, HJ_CCD_1B, NEW, AVHRR} TypeDeCapteur;
     843                 : }
     844                 : 
     845                 : #endif // __INCLUDE_PCIDSK_ORBIT_INFORMATION_H

Generated by: LCOV version 1.7