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
|