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
|