LCOV - code coverage report
Current view: top level - frmts/pcidsk/sdk/segment - orbitstructures.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 0 328 0.0 %
Date: 2024-11-21 22:18:42 Functions: 0 25 0.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Purpose: Support for storing and manipulating Orbit information
       4             :  *
       5             :  ******************************************************************************
       6             :  * Copyright (c) 2009
       7             :  * PCI Geomatics, 90 Allstate Parkway, Markham, Ontario, Canada.
       8             :  *
       9             :  * SPDX-License-Identifier: MIT
      10             :  ****************************************************************************/
      11             : #ifndef INCLUDE_PCIDSK_ORBIT_INFORMATION_H
      12             : #define INCLUDE_PCIDSK_ORBIT_INFORMATION_H
      13             : 
      14             : #include <string>
      15             : #include <cstring>
      16             : #include <vector>
      17             : 
      18             : namespace PCIDSK
      19             : {
      20             : /* -------------------------------------------------------------------- */
      21             : /*      Structure for ephemeris segment (ORBIT segment, type 160).      */
      22             : /* -------------------------------------------------------------------- */
      23             : #define EPHEMERIS_BLK           8
      24             : #define EPHEMERIS_RADAR_BLK     10
      25             : #define EPHEMERIS_ATT_BLK       9
      26             : /* -------------------------------------------------------------------- */
      27             : /*      Structure for Satellite Radar segment.                          */
      28             : /* -------------------------------------------------------------------- */
      29             : #define ANC_DATA_PER_BLK        16
      30             : #define ANC_DATA_SIZE           32
      31             :     /**
      32             :      * Ancillary data structure.
      33             :      */
      34             :     struct AncillaryData_t
      35             :     {
      36             :         /**
      37             :          * Default constructor
      38             :          */
      39           0 :         AncillaryData_t() :
      40             :             SlantRangeFstPixel(0),
      41             :             SlantRangeLastPixel(0),
      42             :             FstPixelLat(0.f),
      43             :             MidPixelLat(0.f),
      44             :             LstPixelLat(0.f),
      45             :             FstPixelLong(0.f),
      46             :             MidPixelLong(0.f),
      47           0 :             LstPixelLong(0.f)
      48             :         {
      49           0 :         }
      50             :         /**
      51             :          * Copy constructor
      52             :          * @param oAD the ancillary data to copy
      53             :          */
      54           0 :         AncillaryData_t(const AncillaryData_t& oAD)
      55           0 :         {
      56           0 :             Copy(oAD);
      57           0 :         }
      58             : 
      59             :         /**
      60             :          * assignment operator
      61             :          * @param oAD the ancillary data to assign
      62             :          */
      63           0 :         AncillaryData_t& operator=(const AncillaryData_t& oAD)
      64             :         {
      65           0 :             Copy(oAD);
      66           0 :             return *this;
      67             :         }
      68             : 
      69             :         /**
      70             :          * Copy function
      71             :          * @param oAD the ancillary data to copy
      72             :          */
      73           0 :         void Copy(const AncillaryData_t& oAD)
      74             :         {
      75           0 :             if(this == &oAD)
      76             :             {
      77           0 :                 return;
      78             :             }
      79           0 :             SlantRangeFstPixel = oAD.SlantRangeFstPixel;
      80           0 :             SlantRangeLastPixel = oAD.SlantRangeLastPixel;
      81           0 :             FstPixelLat = oAD.FstPixelLat;
      82           0 :             MidPixelLat = oAD.MidPixelLat;
      83           0 :             LstPixelLat = oAD.LstPixelLat;
      84           0 :             FstPixelLong = oAD.FstPixelLong;
      85           0 :             MidPixelLong = oAD.MidPixelLong;
      86           0 :             LstPixelLong = oAD.LstPixelLong;
      87             :         }
      88             : 
      89             :         int   SlantRangeFstPixel;   /* Slant Range to First Pixel (m) */
      90             :         int   SlantRangeLastPixel;  /* Slant Range to Last Pixel (m) */
      91             :         float FstPixelLat;          /* First Pixel Latitude (millionths degrees) */
      92             :         float MidPixelLat;          /* Mid Pixel Latitude (millionths degrees)   */
      93             :         float LstPixelLat;          /* Last Pixel Latitude (millionths degrees)  */
      94             :         float FstPixelLong;         /* First Pixel Longitude (millionths degrees)*/
      95             :         float MidPixelLong;         /* Mid Pixel Longitude (millionths degrees)  */
      96             :         float LstPixelLong;         /* Last Pixel Longitude (millionths degrees) */
      97             :     } ;
      98             : 
      99             :     /**
     100             :      * Radar segment information
     101             :      */
     102             :     struct RadarSeg_t
     103             :     {
     104             :         /**
     105             :          * Default constructor
     106             :          */
     107           0 :         RadarSeg_t() :
     108             :             EquatorialRadius(0.0),
     109             :             PolarRadius(0.0),
     110             :             IncidenceAngle(0.0),
     111             :             PixelSpacing(0.0),
     112             :             LineSpacing(0.0),
     113             :             ClockAngle(0.0),
     114             :             NumberBlockData(0),
     115           0 :             NumberData(0)
     116             :         {
     117           0 :         }
     118             :         /**
     119             :          * Copy constructor
     120             :          * @param oRS the radar segment to copy
     121             :          */
     122           0 :         RadarSeg_t(const RadarSeg_t& oRS)
     123           0 :         {
     124           0 :             Copy(oRS);
     125           0 :         }
     126             : 
     127             :         /**
     128             :          * assignment operator
     129             :          * @param oRS the radar segment to assign
     130             :          */
     131             :         RadarSeg_t& operator=(const RadarSeg_t& oRS)
     132             :         {
     133             :             Copy(oRS);
     134             :             return *this;
     135             :         }
     136             : 
     137             :         /**
     138             :          * Copy function
     139             :          * @param oRS the radar segment to copy
     140             :          */
     141           0 :         void Copy(const RadarSeg_t& oRS)
     142             :         {
     143           0 :             if(this == &oRS)
     144             :             {
     145           0 :                 return;
     146             :             }
     147           0 :             Identifier = oRS.Identifier;
     148           0 :             Facility = oRS.Facility;
     149           0 :             Ellipsoid = oRS.Ellipsoid;
     150           0 :             EquatorialRadius = oRS.EquatorialRadius;
     151           0 :             PolarRadius = oRS.PolarRadius;
     152           0 :             IncidenceAngle = oRS.IncidenceAngle;
     153           0 :             PixelSpacing = oRS.PixelSpacing;
     154           0 :             LineSpacing = oRS.LineSpacing;
     155           0 :             ClockAngle = oRS.ClockAngle;
     156             : 
     157           0 :             NumberBlockData = oRS.NumberBlockData;
     158           0 :             NumberData = oRS.NumberData;
     159             : 
     160           0 :             Line = oRS.Line;
     161             :         }
     162             : 
     163             :         std::string   Identifier; /* Product identifier */
     164             :         std::string   Facility; /* Processing facility */
     165             :         std::string   Ellipsoid; /* Ellipsoid designator */
     166             :         double EquatorialRadius; /* Equatorial radius of earth */
     167             :         double PolarRadius; /* Polar radius of earth */
     168             :         double IncidenceAngle; /* Incidence angle */
     169             :         double PixelSpacing; /* Nominal pixel spacing in metre */
     170             :         double LineSpacing; /* Nominal line spacing in metre */
     171             :         double ClockAngle; /* Clock angle in degree */
     172             : 
     173             :         int    NumberBlockData; /* Number of blocks of ancillary data */
     174             :         int  NumberData; /* Number of ancillary data */
     175             : 
     176             :         std::vector<AncillaryData_t> Line; /* Pointer to ancillary line */
     177             :     } ;
     178             : 
     179             : /* -------------------------------------------------------------------- */
     180             : /*       Structure for Satellite attitude segment.                      */
     181             : /* -------------------------------------------------------------------- */
     182             : #define ATT_SEG_BLK             604
     183             : #define ATT_SEG_MAX_LINE        6000
     184             : #define ATT_SEG_LINE_PER_BLOCK  10
     185             : 
     186             :     /**
     187             :      * Attitude line information
     188             :      */
     189             :     struct AttitudeLine_t
     190             :     {
     191             :         /**
     192             :          * Default constructor
     193             :          */
     194           0 :         AttitudeLine_t():
     195             :             ChangeInAttitude(0.0),
     196           0 :             ChangeEarthSatelliteDist(0.0)
     197             :         {
     198           0 :         }
     199             :         /**
     200             :          * Copy constructor
     201             :          * @param oAL the attitude line to copy
     202             :          */
     203           0 :         AttitudeLine_t(const AttitudeLine_t& oAL)
     204           0 :         {
     205           0 :             Copy(oAL);
     206           0 :         }
     207             : 
     208             :         /**
     209             :          * assignment operator
     210             :          * @param oAL the attitude line to assign
     211             :          */
     212           0 :         AttitudeLine_t& operator=(const AttitudeLine_t& oAL)
     213             :         {
     214           0 :             Copy(oAL);
     215           0 :             return *this;
     216             :         }
     217             : 
     218             :         /**
     219             :          * Copy function
     220             :          * @param oAL the attitude line to copy
     221             :          */
     222           0 :         void Copy(const AttitudeLine_t& oAL)
     223             :         {
     224           0 :             if(this == &oAL)
     225             :             {
     226           0 :                 return;
     227             :             }
     228           0 :             ChangeInAttitude = oAL.ChangeInAttitude;
     229           0 :             ChangeEarthSatelliteDist = oAL.ChangeEarthSatelliteDist;
     230             :         }
     231             : 
     232             :         double ChangeInAttitude; /* Change in satellite attitude (D22.16) */
     233             :         double ChangeEarthSatelliteDist; /* Change in earth-satellite distance
     234             :                                          (D22.16) */
     235             :     } ;
     236             : 
     237             :     /**
     238             :      * Attitude segment information
     239             :      */
     240             :     struct AttitudeSeg_t
     241             :     {
     242             :         /**
     243             :          * Default constructor
     244             :          */
     245           0 :         AttitudeSeg_t() :
     246             :             Roll(0.0),
     247             :             Pitch(0.0),
     248             :             Yaw(0.0),
     249             :             NumberOfLine(0),
     250           0 :             NumberBlockData(0)
     251             :         {
     252           0 :         }
     253             :         /**
     254             :          * Copy constructor
     255             :          * @param oAS the attitude segment to copy
     256             :          */
     257           0 :         AttitudeSeg_t(const AttitudeSeg_t& oAS)
     258           0 :         {
     259           0 :             Copy(oAS);
     260           0 :         }
     261             : 
     262             :         /**
     263             :          * assignment operator
     264             :          * @param oAS the avhrr segment to assign
     265             :          */
     266             :         AttitudeSeg_t& operator=(const AttitudeSeg_t& oAS)
     267             :         {
     268             :             Copy(oAS);
     269             :             return *this;
     270             :         }
     271             : 
     272             :         /**
     273             :          * Copy function
     274             :          * @param oAS the avhrr segment to copy
     275             :          */
     276           0 :         void Copy(const AttitudeSeg_t& oAS)
     277             :         {
     278           0 :             if(this == &oAS)
     279             :             {
     280           0 :                 return;
     281             :             }
     282           0 :             Roll = oAS.Roll;
     283           0 :             Pitch = oAS.Pitch;
     284           0 :             Yaw = oAS.Yaw;
     285           0 :             NumberOfLine = oAS.NumberOfLine;
     286           0 :             NumberBlockData = oAS.NumberBlockData;
     287           0 :             Line = oAS.Line;
     288             :         }
     289             : 
     290             :         double Roll; /* Roll (D22.16) */
     291             :         double Pitch; /* Pitch (D22.16) */
     292             :         double Yaw; /* Yaw (D22.16) */
     293             :         int  NumberOfLine; /* No. of Lines (I22) */
     294             : 
     295             :         int NumberBlockData; /* No. of block of data. */
     296             :         std::vector<AttitudeLine_t> Line;
     297             : 
     298             :     } ;
     299             : 
     300             : /* -------------------------------------------------------------------- */
     301             : /*      AVHRR orbit segment. Composed of 11 blocks plus extra blocks    */
     302             : /*      for holding per-scanline information.                           */
     303             : /* -------------------------------------------------------------------- */
     304             : #define AVH_SEG_BASE_NUM_BLK    11
     305             : 
     306             :     /**
     307             :      * Avhrr line information
     308             :      */
     309             :     struct AvhrrLine_t
     310             :     {
     311             :         /**
     312             :          * Default constructor
     313             :          */
     314           0 :         AvhrrLine_t()
     315           0 :         {
     316           0 :             nScanLineNum = 0;
     317           0 :             nStartScanTimeGMTMsec = 0;
     318           0 :             std::memset(abyScanLineQuality, 0, sizeof(abyScanLineQuality));
     319           0 :             std::memset(aabyBadBandIndicators, 0, sizeof(aabyBadBandIndicators));
     320           0 :             std::memset(abySatelliteTimeCode, 0, sizeof(abySatelliteTimeCode));
     321           0 :             std::memset(anTargetTempData, 0, sizeof(anTargetTempData));
     322           0 :             std::memset(anTargetScanData, 0, sizeof(anTargetScanData));
     323           0 :             std::memset(anSpaceScanData, 0, sizeof(anSpaceScanData));
     324           0 :         }
     325             :         /**
     326             :          * Copy constructor
     327             :          * @param oAL the avhrr line to copy
     328             :          */
     329           0 :         AvhrrLine_t(const AvhrrLine_t& oAL)
     330           0 :         {
     331           0 :             Copy(oAL);
     332           0 :         }
     333             : 
     334             :         /**
     335             :          * assignment operator
     336             :          * @param oAL the avhrr line to assign
     337             :          */
     338           0 :         AvhrrLine_t& operator=(const AvhrrLine_t& oAL)
     339             :         {
     340           0 :             Copy(oAL);
     341           0 :             return *this;
     342             :         }
     343             : 
     344             :         /**
     345             :          * Copy function
     346             :          * @param oAL the avhrr line to copy
     347             :          */
     348           0 :         void Copy(const AvhrrLine_t& oAL)
     349             :         {
     350           0 :             if(this == &oAL)
     351             :             {
     352           0 :                 return;
     353             :             }
     354           0 :             nScanLineNum = oAL.nScanLineNum;
     355           0 :             nStartScanTimeGMTMsec = oAL.nStartScanTimeGMTMsec;
     356           0 :             for(int i=0 ; i < 10 ; i++)
     357           0 :                 abyScanLineQuality[i] = oAL.abyScanLineQuality[i];
     358           0 :             for(int i=0 ; i < 5 ; i++)
     359             :             {
     360           0 :                 aabyBadBandIndicators[i][0] = oAL.aabyBadBandIndicators[i][0];
     361           0 :                 aabyBadBandIndicators[i][1] = oAL.aabyBadBandIndicators[i][1];
     362           0 :                 anSpaceScanData[i] = oAL.anSpaceScanData[i];
     363             :             }
     364           0 :             for(int i=0 ; i < 8 ; i++)
     365           0 :                 abySatelliteTimeCode[i] = oAL.abySatelliteTimeCode[i];
     366           0 :             for(int i=0 ; i < 3 ; i++)
     367             :             {
     368           0 :                 anTargetTempData[i] = oAL.anTargetTempData[i];
     369           0 :                 anTargetScanData[i] = oAL.anTargetScanData[i];
     370             :             }
     371             :         }
     372             : 
     373             :         /* For geocoding */
     374             :         int   nScanLineNum;
     375             :         int   nStartScanTimeGMTMsec;
     376             :         unsigned char abyScanLineQuality[10];
     377             :         unsigned char aabyBadBandIndicators[5][2];
     378             :         unsigned char abySatelliteTimeCode[8];
     379             : 
     380             :         /* For thermal/IR calibration */
     381             :         int   anTargetTempData[3];
     382             :         int   anTargetScanData[3];
     383             :         int   anSpaceScanData[5];
     384             : 
     385             :     } ;
     386             : 
     387             :     /**
     388             :      * Avhrr segment information.
     389             :      */
     390             :     struct AvhrrSeg_t
     391             :     {
     392             :         /**
     393             :          * Default constructor
     394             :          */
     395           0 :         AvhrrSeg_t() :
     396             :             nImageXSize(0),
     397             :             nImageYSize(0),
     398             :             bIsAscending(false),
     399             :             bIsImageRotated(false),
     400             :             nRecordSize(0),
     401             :             nBlockSize(0),
     402             :             nNumRecordsPerBlock(0),
     403             :             nNumBlocks(0),
     404           0 :             nNumScanlineRecords(0)
     405             :         {
     406           0 :         }
     407             :         /**
     408             :          * Copy constructor
     409             :          * @param oAS the avhrr segment to copy
     410             :          */
     411           0 :         AvhrrSeg_t(const AvhrrSeg_t& oAS)
     412           0 :         {
     413           0 :             Copy(oAS);
     414           0 :         }
     415             : 
     416             :         /**
     417             :          * assignment operator
     418             :          * @param oAS the avhrr segment to assign
     419             :          */
     420             :         AvhrrSeg_t& operator=(const AvhrrSeg_t& oAS)
     421             :         {
     422             :             Copy(oAS);
     423             :             return *this;
     424             :         }
     425             : 
     426             :         /**
     427             :          * Copy function
     428             :          * @param oAS the avhrr segment to copy
     429             :          */
     430           0 :         void Copy(const AvhrrSeg_t& oAS)
     431             :         {
     432           0 :             if(this == &oAS)
     433             :             {
     434           0 :                 return;
     435             :             }
     436           0 :             szImageFormat = oAS.szImageFormat;
     437           0 :             nImageXSize = oAS.nImageXSize;
     438           0 :             nImageYSize = oAS.nImageYSize;
     439           0 :             bIsAscending = oAS.bIsAscending;
     440           0 :             bIsImageRotated = oAS.bIsImageRotated;
     441           0 :             szOrbitNumber = oAS.szOrbitNumber;
     442           0 :             szAscendDescendNodeFlag = oAS.szAscendDescendNodeFlag;
     443           0 :             szEpochYearAndDay = oAS.szEpochYearAndDay;
     444           0 :             szEpochTimeWithinDay = oAS.szEpochTimeWithinDay;
     445           0 :             szTimeDiffStationSatelliteMsec = oAS.szTimeDiffStationSatelliteMsec;
     446           0 :             szActualSensorScanRate = oAS.szActualSensorScanRate;
     447           0 :             szIdentOfOrbitInfoSource = oAS.szIdentOfOrbitInfoSource;
     448           0 :             szInternationalDesignator = oAS.szInternationalDesignator;
     449           0 :             szOrbitNumAtEpoch = oAS.szOrbitNumAtEpoch;
     450           0 :             szJulianDayAscendNode = oAS.szJulianDayAscendNode;
     451           0 :             szEpochYear = oAS.szEpochYear;
     452           0 :             szEpochMonth = oAS.szEpochMonth;
     453           0 :             szEpochDay = oAS.szEpochDay;
     454           0 :             szEpochHour = oAS.szEpochHour;
     455           0 :             szEpochMinute = oAS.szEpochMinute;
     456           0 :             szEpochSecond = oAS.szEpochSecond;
     457           0 :             szPointOfAriesDegrees = oAS.szPointOfAriesDegrees;
     458           0 :             szAnomalisticPeriod = oAS.szAnomalisticPeriod;
     459           0 :             szNodalPeriod = oAS.szNodalPeriod;
     460           0 :             szEccentricity = oAS.szEccentricity;
     461           0 :             szArgumentOfPerigee = oAS.szArgumentOfPerigee;
     462           0 :             szRAAN = oAS.szRAAN;
     463           0 :             szInclination = oAS.szInclination;
     464           0 :             szMeanAnomaly = oAS.szMeanAnomaly;
     465           0 :             szSemiMajorAxis = oAS.szSemiMajorAxis;
     466           0 :             nRecordSize = oAS.nRecordSize;
     467           0 :             nBlockSize = oAS.nBlockSize;
     468           0 :             nNumRecordsPerBlock = oAS.nNumRecordsPerBlock;
     469           0 :             nNumBlocks = oAS.nNumBlocks;
     470           0 :             nNumScanlineRecords = oAS.nNumScanlineRecords;
     471           0 :             Line = oAS.Line;
     472             :         }
     473             : 
     474             :         /* Ninth Block Part 1 - General/header information */
     475             :         std::string  szImageFormat;
     476             :         int   nImageXSize;
     477             :         int   nImageYSize;
     478             :         bool bIsAscending;
     479             :         bool bIsImageRotated;
     480             : 
     481             :         /* Ninth Block Part 2 - Ephemeris information */
     482             :         std::string  szOrbitNumber;
     483             :         std::string  szAscendDescendNodeFlag;
     484             :         std::string  szEpochYearAndDay;
     485             :         std::string  szEpochTimeWithinDay;
     486             :         std::string  szTimeDiffStationSatelliteMsec;
     487             :         std::string  szActualSensorScanRate;
     488             :         std::string  szIdentOfOrbitInfoSource;
     489             :         std::string  szInternationalDesignator;
     490             :         std::string  szOrbitNumAtEpoch;
     491             :         std::string  szJulianDayAscendNode;
     492             :         std::string  szEpochYear;
     493             :         std::string  szEpochMonth;
     494             :         std::string  szEpochDay;
     495             :         std::string  szEpochHour;
     496             :         std::string  szEpochMinute;
     497             :         std::string  szEpochSecond;
     498             :         std::string  szPointOfAriesDegrees;
     499             :         std::string  szAnomalisticPeriod;
     500             :         std::string  szNodalPeriod;
     501             :         std::string  szEccentricity;
     502             :         std::string  szArgumentOfPerigee;
     503             :         std::string  szRAAN;
     504             :         std::string  szInclination;
     505             :         std::string  szMeanAnomaly;
     506             :         std::string  szSemiMajorAxis;
     507             : 
     508             :         /* 10th Block - Empty, reserved for future use */
     509             : 
     510             :         /* 11th Block - Needed for indexing 12th block onwards */
     511             :         int   nRecordSize;
     512             :         int   nBlockSize;
     513             :         int   nNumRecordsPerBlock;
     514             :         int   nNumBlocks;
     515             :         int   nNumScanlineRecords;
     516             : 
     517             :         /* 12th Block and onwards - Per-scanline records */
     518             :         std::vector<AvhrrLine_t> Line;
     519             : 
     520             :     } ;
     521             : 
     522             :     /**
     523             :      * Possible orbit types.
     524             :      */
     525             :     typedef enum
     526             :     {
     527             :         OrbNone,
     528             :         OrbAttitude,
     529             :         OrbLatLong,
     530             :         OrbAvhrr
     531             :     } OrbitType;
     532             : 
     533             :     /**
     534             :      * Ephemeris segment structure
     535             :      */
     536             :     struct EphemerisSeg_t
     537             :     {
     538             :         /**
     539             :          * Default constructor
     540             :          */
     541           0 :         EphemerisSeg_t()
     542           0 :         {
     543           0 :             SupSegExist = false;
     544           0 :             FieldOfView = 0.0;
     545           0 :             ViewAngle = 0.0;
     546           0 :             NumColCentre = 0.0;
     547           0 :             RadialSpeed = 0.0;
     548           0 :             Eccentricity = 0.0;
     549           0 :             Height = 0.0;
     550           0 :             Inclination = 0.0;
     551           0 :             TimeInterval = 0.0;
     552           0 :             NumLineCentre = 0.0;
     553           0 :             LongCentre = 0.0;
     554           0 :             AngularSpd = 0.0;
     555           0 :             AscNodeLong = 0.0;
     556           0 :             ArgPerigee = 0.0;
     557           0 :             LatCentre = 0.0;
     558           0 :             EarthSatelliteDist = 0.0;
     559           0 :             NominalPitch = 0.0;
     560           0 :             TimeAtCentre = 0.0;
     561           0 :             SatelliteArg = 0.0;
     562           0 :             XCentre = 0.0;
     563           0 :             YCentre = 0.0;
     564           0 :             UtmYCentre = 0.0;
     565           0 :             UtmXCentre = 0.0;
     566           0 :             PixelRes = 0.0;
     567           0 :             LineRes = 0.0;
     568           0 :             CornerAvail = false;
     569           0 :             XUL = 0.0;
     570           0 :             YUL = 0.0;
     571           0 :             XUR = 0.0;
     572           0 :             YUR = 0.0;
     573           0 :             XLR = 0.0;
     574           0 :             YLR = 0.0;
     575           0 :             XLL = 0.0;
     576           0 :             YLL = 0.0;
     577           0 :             UtmYUL = 0.0;
     578           0 :             UtmXUL = 0.0;
     579           0 :             UtmYUR = 0.0;
     580           0 :             UtmXUR = 0.0;
     581           0 :             UtmYLR = 0.0;
     582           0 :             UtmXLR = 0.0;
     583           0 :             UtmYLL = 0.0;
     584           0 :             UtmXLL = 0.0;
     585           0 :             LatCentreDeg = 0.0;
     586           0 :             LongCentreDeg = 0.0;
     587           0 :             LatUL = 0.0;
     588           0 :             LongUL = 0.0;
     589           0 :             LatUR = 0.0;
     590           0 :             LongUR = 0.0;
     591           0 :             LatLR = 0.0;
     592           0 :             LongLR = 0.0;
     593           0 :             LatLL = 0.0;
     594           0 :             LongLL = 0.0;
     595           0 :             HtCentre = 0.0;
     596           0 :             HtUL = 0.0;
     597           0 :             HtUR = 0.0;
     598           0 :             HtLR = 0.0;
     599           0 :             HtLL = 0.0;
     600           0 :             std::memset(SPCoeff1B, 0, sizeof(SPCoeff1B));
     601           0 :             std::memset(SPCoeffSg, 0, sizeof(SPCoeffSg));
     602           0 :             ImageRecordLength = 0;
     603           0 :             NumberImageLine = 0;
     604           0 :             NumberBytePerPixel = 0;
     605           0 :             NumberSamplePerLine = 0;
     606           0 :             NumberPrefixBytes = 0;
     607           0 :             NumberSuffixBytes = 0;
     608           0 :             SPNCoeff = 0;
     609           0 :             bDescending = false;
     610           0 :             Type = OrbNone;
     611           0 :             AttitudeSeg = nullptr;
     612           0 :             RadarSeg = nullptr;
     613           0 :             AvhrrSeg = nullptr;
     614           0 :         }
     615             : 
     616             :         /**
     617             :          * Destructor
     618             :          */
     619           0 :         ~EphemerisSeg_t()
     620           0 :         {
     621           0 :             delete AttitudeSeg;
     622           0 :             delete RadarSeg;
     623           0 :             delete AvhrrSeg;
     624           0 :         }
     625             : 
     626             :         /**
     627             :          * Copy constructor
     628             :          * @param oES the ephemeris segment to copy
     629             :          */
     630           0 :         EphemerisSeg_t(const EphemerisSeg_t& oES): EphemerisSeg_t()
     631             :         {
     632           0 :             Copy(oES);
     633           0 :         }
     634             : 
     635             :         /**
     636             :          * assignment operator
     637             :          * @param oES the ephemeris segment to assign
     638             :          */
     639             :         EphemerisSeg_t& operator=(const EphemerisSeg_t& oES)
     640             :         {
     641             :             Copy(oES);
     642             :             return *this;
     643             :         }
     644             : 
     645             :         /**
     646             :          * Copy function
     647             :          * @param oES the ephemeris segment to copy
     648             :          */
     649           0 :         void Copy(const EphemerisSeg_t& oES)
     650             :         {
     651           0 :             if(this == &oES)
     652             :             {
     653           0 :                 return;
     654             :             }
     655           0 :             delete AttitudeSeg;
     656           0 :             delete RadarSeg;
     657           0 :             delete AvhrrSeg;
     658           0 :             AttitudeSeg = nullptr;
     659           0 :             RadarSeg = nullptr;
     660           0 :             AvhrrSeg = nullptr;
     661           0 :             if(oES.AttitudeSeg)
     662           0 :                 AttitudeSeg = new AttitudeSeg_t(*oES.AttitudeSeg);
     663           0 :             if(oES.RadarSeg)
     664           0 :                 RadarSeg = new RadarSeg_t(*oES.RadarSeg);
     665           0 :             if(oES.AvhrrSeg)
     666           0 :                 AvhrrSeg = new AvhrrSeg_t(*oES.AvhrrSeg);
     667             : 
     668           0 :             for(int i =0 ; i <39 ; i++)
     669           0 :                 SPCoeff1B[i] = oES.SPCoeff1B[i];
     670           0 :             for(int i =0 ; i <4 ; i++)
     671           0 :                 SPCoeffSg[i] = oES.SPCoeffSg[i];
     672             : 
     673           0 :             SatelliteDesc = oES.SatelliteDesc;
     674           0 :             SceneID = oES.SceneID;
     675           0 :             SatelliteSensor = oES.SatelliteSensor;
     676           0 :             SensorNo = oES.SensorNo;
     677           0 :             DateImageTaken = oES.DateImageTaken;
     678           0 :             SupSegExist = oES.SupSegExist;
     679           0 :             FieldOfView = oES.FieldOfView;
     680           0 :             ViewAngle = oES.ViewAngle;
     681           0 :             NumColCentre = oES.NumColCentre;
     682           0 :             RadialSpeed = oES.RadialSpeed;
     683           0 :             Eccentricity = oES.Eccentricity;
     684           0 :             Height = oES.Height;
     685           0 :             Inclination = oES.Inclination;
     686           0 :             TimeInterval = oES.TimeInterval;
     687           0 :             NumLineCentre = oES.NumLineCentre;
     688           0 :             LongCentre = oES.LongCentre;
     689           0 :             AngularSpd = oES.AngularSpd;
     690           0 :             AscNodeLong = oES.AscNodeLong;
     691           0 :             ArgPerigee = oES.ArgPerigee;
     692           0 :             LatCentre = oES.LatCentre;
     693           0 :             EarthSatelliteDist = oES.EarthSatelliteDist;
     694           0 :             NominalPitch = oES.NominalPitch;
     695           0 :             TimeAtCentre = oES.TimeAtCentre;
     696           0 :             SatelliteArg = oES.SatelliteArg;
     697           0 :             XCentre = oES.XCentre;
     698           0 :             YCentre = oES.YCentre;
     699           0 :             UtmYCentre = oES.UtmYCentre;
     700           0 :             UtmXCentre = oES.UtmXCentre;
     701           0 :             PixelRes = oES.PixelRes;
     702           0 :             LineRes = oES.LineRes;
     703           0 :             CornerAvail = oES.CornerAvail;
     704           0 :             MapUnit = oES.MapUnit;
     705           0 :             XUL = oES.XUL;
     706           0 :             YUL = oES.YUL;
     707           0 :             XUR = oES.XUR;
     708           0 :             YUR = oES.YUR;
     709           0 :             XLR = oES.XLR;
     710           0 :             YLR = oES.YLR;
     711           0 :             XLL = oES.XLL;
     712           0 :             YLL = oES.YLL;
     713           0 :             UtmYUL = oES.UtmYUL;
     714           0 :             UtmXUL = oES.UtmXUL;
     715           0 :             UtmYUR = oES.UtmYUR;
     716           0 :             UtmXUR = oES.UtmXUR;
     717           0 :             UtmYLR = oES.UtmYLR;
     718           0 :             UtmXLR = oES.UtmXLR;
     719           0 :             UtmYLL = oES.UtmYLL;
     720           0 :             UtmXLL = oES.UtmXLL;
     721           0 :             LatCentreDeg = oES.LatCentreDeg;
     722           0 :             LongCentreDeg = oES.LongCentreDeg;
     723           0 :             LatUL = oES.LatUL;
     724           0 :             LongUL = oES.LongUL;
     725           0 :             LatUR = oES.LatUR;
     726           0 :             LongUR = oES.LongUR;
     727           0 :             LatLR = oES.LatLR;
     728           0 :             LongLR = oES.LongLR;
     729           0 :             LatLL = oES.LatLL;
     730           0 :             LongLL = oES.LongLL;
     731           0 :             HtCentre = oES.HtCentre;
     732           0 :             HtUL = oES.HtUL;
     733           0 :             HtUR = oES.HtUR;
     734           0 :             HtLR = oES.HtLR;
     735           0 :             HtLL = oES.HtLL;
     736           0 :             ImageRecordLength = oES.ImageRecordLength;
     737           0 :             NumberImageLine = oES.NumberImageLine;
     738           0 :             NumberBytePerPixel = oES.NumberBytePerPixel;
     739           0 :             NumberSamplePerLine = oES.NumberSamplePerLine;
     740           0 :             NumberPrefixBytes = oES.NumberPrefixBytes;
     741           0 :             NumberSuffixBytes = oES.NumberSuffixBytes;
     742           0 :             SPNCoeff = oES.SPNCoeff;
     743           0 :             bDescending = oES.bDescending;
     744           0 :             Type = oES.Type;
     745             :         }
     746             : 
     747             :         /// Satellite description
     748             :         std::string SatelliteDesc;
     749             :         /// Scene ID
     750             :         std::string SceneID;
     751             : 
     752             :         /// Satellite sensor
     753             :         std::string SatelliteSensor;
     754             :         /// Satellite sensor no.
     755             :         std::string SensorNo;
     756             :         /// Date of image taken
     757             :         std::string DateImageTaken;
     758             :         /// Flag to indicate supplemental segment
     759             :         bool SupSegExist;
     760             :         /// Scanner field of view (ALPHA)
     761             :         double FieldOfView;
     762             :         /// Viewing angle (BETA)
     763             :         double ViewAngle;
     764             :         /// Number of column at center (C0)
     765             :         double NumColCentre;
     766             :         /// Radial speed (DELIRO)
     767             :         double RadialSpeed;
     768             :         /// Eccentricity (ES)
     769             :         double Eccentricity;
     770             :         /// Height (H0)
     771             :         double Height;
     772             :         /// Inclination (I)
     773             :         double Inclination;
     774             :         /// Time interval (K)
     775             :         double TimeInterval;
     776             :         /// Number of line at center (L0)
     777             :         double NumLineCentre;
     778             :         /// Longitude of center (LAMBDA)
     779             :         double LongCentre;
     780             :         /// Angular speed (N)
     781             :         double AngularSpd;
     782             :         /// Ascending node Longitude (OMEGA-MAJ)
     783             :         double AscNodeLong;
     784             :         /// Argument Perigee (OMEGA-MIN)
     785             :         double ArgPerigee;
     786             :         /// Latitude of center (PHI)
     787             :         double LatCentre;
     788             :         /// Earth Satellite distance (RHO)
     789             :         double EarthSatelliteDist;
     790             :         /// Nominal pitch (T)
     791             :         double NominalPitch;
     792             :         /// Time at centre (T0)
     793             :         double TimeAtCentre;
     794             :         /// Satellite argument (WP)
     795             :         double SatelliteArg;
     796             : 
     797             :         /// Scene center pixel coordinate
     798             :         double XCentre;
     799             :         /// Scene center line coordinate
     800             :         double YCentre;
     801             :         /// Scene centre UTM northing
     802             :         double UtmYCentre;
     803             :         /// Scene centre UTM easting
     804             :         double UtmXCentre;
     805             :         /// Pixel resolution in x direction
     806             :         double PixelRes;
     807             :         /// Pixel resolution in y direction
     808             :         double LineRes;
     809             :         /// Flag to tell corner coordinate available
     810             :         bool CornerAvail;
     811             :         /// Map units
     812             :         std::string MapUnit;
     813             :         /// Pixel coordinate of upper left corner
     814             :         double XUL;
     815             :         /// Line coordinate of upper left corner
     816             :         double YUL;
     817             :         /// Pixel coordinate of upper right corner
     818             :         double XUR;
     819             :         /// Line coordinate of upper right corner
     820             :         double YUR;
     821             :         /// Pixel coordinate of lower right corner
     822             :         double XLR;
     823             :         /// Line coordinate of lower right corner
     824             :         double YLR;
     825             :         /// Pixel coordinate of lower left corner
     826             :         double XLL;
     827             :         /// Line coordinate of lower left corner
     828             :         double YLL;
     829             :         /// UTM Northing of upper left corner
     830             :         double UtmYUL;
     831             :         /// UTM Easting of upper left corner
     832             :         double UtmXUL;
     833             :         /// UTM Northing of upper right corner
     834             :         double UtmYUR;
     835             :         /// UTM Easting of upper right corner
     836             :         double UtmXUR;
     837             :         /// UTM Northing of lower right corner
     838             :         double UtmYLR;
     839             :         /// UTM Easting of lower right corner
     840             :         double UtmXLR;
     841             :         /// Utm Northing of lower left corner
     842             :         double UtmYLL;
     843             :         /// Utm Easting of lower left corner
     844             :         double UtmXLL;
     845             : 
     846             :         /// Scene centre latitude (deg)
     847             :         double LatCentreDeg;
     848             :         /// Scene centre longitude (deg)
     849             :         double LongCentreDeg;
     850             :         /// Upper left latitude (deg)
     851             :         double LatUL;
     852             :         /// Upper left longitude (deg)
     853             :         double LongUL;
     854             :         /// Upper right latitude (deg)
     855             :         double LatUR;
     856             :         /// Upper right longitude (deg)
     857             :         double LongUR;
     858             :         /// Lower right latitude (deg)
     859             :         double LatLR;
     860             :         /// Lower right longitude (deg)
     861             :         double LongLR;
     862             :         /// Lower left latitude (deg)
     863             :         double LatLL;
     864             :         /// Lower left longitude (deg)
     865             :         double LongLL;
     866             :         /// Centre Height (m)
     867             :         double HtCentre;
     868             :         /// UL Height (m)
     869             :         double HtUL;
     870             :         /// UR Height (m)
     871             :         double HtUR;
     872             :         /// LR Height (m)
     873             :         double HtLR;
     874             :         /// LL Height (m)
     875             :         double HtLL;
     876             : 
     877             :         /// SPOT 1B coefficients
     878             :         double SPCoeff1B[39];
     879             :         /// SPOT 1B segment coefficients
     880             :         int    SPCoeffSg[4];
     881             : 
     882             :         /// Image record length
     883             :         int    ImageRecordLength;
     884             :         /// Number of image line
     885             :         int    NumberImageLine;
     886             :         /// Number of bytes per pixel
     887             :         int    NumberBytePerPixel;
     888             :         /// Number of samples per line
     889             :         int    NumberSamplePerLine;
     890             :         /// Number of prefix bytes
     891             :         int    NumberPrefixBytes;
     892             :         /// Number of suffix bytes
     893             :         int    NumberSuffixBytes;
     894             :         /// Number of coefficients for SPOT 1B
     895             :         int    SPNCoeff;
     896             : 
     897             :         /// Flag to indicate ascending or descending
     898             :         bool  bDescending;
     899             : 
     900             :         /// Orbit type: None, LatLong, Attitude, Avhrr
     901             :         OrbitType   Type;
     902             :         AttitudeSeg_t *AttitudeSeg;
     903             :         RadarSeg_t    *RadarSeg;
     904             :         AvhrrSeg_t    *AvhrrSeg;
     905             :     };
     906             : 
     907             :     /**
     908             :      * List of sensor type
     909             :      */
     910             :     typedef enum {PLA_1, MLA_1, PLA_2, MLA_2, PLA_3, MLA_3, PLA_4, MLA_4,
     911             :                   ASTER, SAR, LISS_1, LISS_2, LISS_3, LISS_L3, LISS_L3_L2,
     912             :                   LISS_L4, LISS_L4_L2, LISS_P3, LISS_P3_L2, LISS_W3, LISS_W3_L2,
     913             :                   LISS_AWF, LISS_AWF_L2, LISS_M3, EOC, IRS_1, RSAT_FIN,
     914             :                   RSAT_STD, ERS_1, ERS_2, TM, ETM, IKO_PAN, IKO_MULTI,
     915             :                   ORBVIEW_PAN, ORBVIEW_MULTI, OV3_PAN_BASIC, OV3_PAN_GEO,
     916             :                   OV3_MULTI_BASIC, OV3_MULTI_GEO, OV5_PAN_BASIC, OV5_PAN_GEO,
     917             :                   OV5_MULTI_BASIC, OV5_MULTI_GEO, QBIRD_PAN, QBIRD_PAN_STD,
     918             :                   QBIRD_PAN_STH, QBIRD_MULTI, QBIRD_MULTI_STD, QBIRD_MULTI_STH,
     919             :                   FORMOSAT_PAN, FORMOSAT_MULTI, FORMOSAT_PAN_L2,
     920             :                   FORMOSAT_MULTIL2, SPOT5_PAN_2_5, SPOT5_PAN_5, SPOT5_HRS,
     921             :                   SPOT5_MULTI, MERIS_FR, MERIS_RR, MERIS_LR, ASAR, EROS,
     922             :                   MODIS_250, MODIS_500, MODIS_1000, CBERS_HRC, CBERS_HRC_L2,
     923             :                   CBERS_CCD, CBERS_CCD_L2, CBERS_IRM_80, CBERS_IRM_80_L2,
     924             :                   CBERS_IRM_160, CBERS_IRM_160_L2, CBERS_WFI, CBERS_WFI_L2,
     925             :                   CARTOSAT1_L1, CARTOSAT1_L2, ALOS_PRISM_L1, ALOS_PRISM_L2,
     926             :                   ALOS_AVNIR_L1, ALOS_AVNIR_L2, PALSAR, DMC_1R, DMC_1T,
     927             :                   KOMPSAT2_PAN, KOMPSAT2_MULTI, KOMPSAT3_PAN, KOMPSAT3_MS, KOMPSAT3_PSH,
     928             :                   KOMPSAT3A_PAN, KOMPSAT3A_MS, KOMPSAT3A_PSH,
     929             :                   TERRASAR, WVIEW_PAN, WVIEW_PAN_STD, WVIEW_MULTI,
     930             :                   WVIEW_MULTI_STD, RAPIDEYE_L1B, THEOS_PAN_L1, THEOS_PAN_L2,
     931             :                   THEOS_MS_L1, THEOS_MS_L2,
     932             :                   GOSAT_500_L1, GOSAT_500_L2, GOSAT_1500_L1, GOSAT_1500_L2,
     933             :                   HJ_CCD_1A, HJ_CCD_1B, PLEIADES_PAN_L1, PLEIADES_MS_L1,
     934             :                   PLEIADES_PAN_L2, PLEIADES_MS_L2, SSOT_PAN_L1, SSOT_MS_L1,
     935             :                   SSOT_PAN_L2, SSOT_MS_L2,
     936             :                   SPOT1_PAN, SPOT1_MS, SPOT2_PAN, SPOT2_MS,
     937             :                   SPOT3_PAN, SPOT3_MS, SPOT4_PAN, SPOT4_MS,
     938             :                   SPOT6_PAN, SPOT6_MS, SPOT6_PSH, SPOT7_PAN, SPOT7_MS, SPOT7_PSH,
     939             :                   RASAT_PAN, RASAT_MS, TH01_DGP, TH01_GFB, TH01_SXZ,
     940             :                   ZY1_02C_HRC, ZY1_02C_PMS_PAN, ZY1_02C_PMS_MS,
     941             :                   ZY3_NAD, ZY3_FWD, ZY3_BWD, ZY3_MUX, ZY3_TLC, GK2_PAN, GK2_MS, HRC,
     942             :                   MRC_RED, MRC_GRN, MRC_BLU, MRC_NIR, GF1_PMS_PAN, GF1_PMS_MS, GF1_WFV,
     943             :                   GF2_PMS_PAN, GF2_PMS_MS, GF4_PMS_MS, GF4_PMI_Thermal,
     944             :                   GF6_PMS_PAN, GF6_PMS_MS, SJ9_PAN, SJ9_MUX, SJ9_PMS_PAN, SJ9_PMS_MS,
     945             :                   YG2_1, YG8_1, YG14_1, UAVSAR, HI_RES, MED_RES, ALSAT2_PAN_1A, ALSAT2_MS_1A,
     946             :                   ALSAT2_PAN_2A, ALSAT2_MS_2A, DUBAISAT2_PAN, DUBAISAT2_MS,
     947             :                   KAZEOSAT1_PAN_1A, KAZEOSAT1_MS_1A, KAZEOSAT1_PAN_2A, KAZEOSAT1_MS_2A, KAZEOSAT2_MS_1G,
     948             :                   DEIMOS1_MS_1R, DEIMOS2_PAN_1B, DEIMOS2_MS_1B, DEIMOS2_PSH_1B, HJ1C,
     949             :                   TRIPLESAT_PAN, TRIPLESAT_MS, RESOURCESAT, JL101A_PAN, JL101A_MS,
     950             :                   CBERS4_PAN_1, CBERS4_MS_1, CBERS4_PAN_2, CBERS4_MS_2,
     951             :                   CBERS4_THM_1, CBERS4_THM_2, SV1_PAN_L1, SV1_MS_L1, SV1_PAN_L2, SV1_MS_L2,
     952             :                   PER_PAN_2A, PER_MS_2A, FORMOSAT5_PAN, FORMOSAT5_MS,
     953             :                   GEOEYE_PAN, GEOEYE_MULTI, GEOEYE_PAN_STD, GEOEYE_MULTI_STD,
     954             :                   GOKTURK1_PAN, GOKTURK1_MS,
     955             :                   NEW, AVHRR, MSS} TypeDeCapteur;
     956             : }
     957             : 
     958             : #endif // INCLUDE_PCIDSK_ORBIT_INFORMATION_H

Generated by: LCOV version 1.14