Earth Observation Mission CFI Software Visibility Software User Manual |
00001 //-------------------------------------------------------- 00002 // Earth Observation Mission CFI Software. Version 4.9 00003 //-------------------------------------------------------- 00004 00005 //-------------------------------------------------------------------- 00006 // CVS Info: $Id: VisibilityData.h,v 1.27 2014-03-03 16:21:13 cavm Exp $ 00007 //-------------------------------------------------------------------- 00008 00013 00014 #ifndef __EECFI_VISIBILITYDATA__ 00015 #define __EECFI_VISIBILITYDATA__ 00016 00017 //--INCLUDE----------------------------------------------------------- 00018 #include "DataHandlingData.h" 00019 #include "LibData.h" 00020 #include "OrbitData.h" 00021 #include "PointingData.h" 00022 #include "ANXTime.h" 00023 #include "StationRec.h" 00024 #include "SdfFile.h" 00025 #include "StfFile.h" 00026 #include "ZoneRec.h" 00027 00028 //--NAMESPACES-------------------------------------------------------- 00029 using namespace std; 00030 00031 namespace EECFI 00032 { 00033 //------------------------------------------------------ 00034 // CONSTANT DATA 00035 //------------------------------------------------------ 00036 00037 //------------------------------------------------------ 00038 // DATA ENUMERATION 00039 // Enumeration values are defined in an equivalent way to the C library 00040 // except for the prefix that has been changed from XX_ to XXCFI_ 00041 //------------------------------------------------------ 00042 00044 typedef enum 00045 { 00046 XVCFI_ORBIT_ABS = 0, 00047 XVCFI_ORBIT_REL = 1 00048 } OrbitTypeEnum; 00049 00051 typedef enum 00052 { 00053 XVCFI_STF = 0, 00054 XVCFI_SDF = 1 00055 } SwathTypeEnum; 00056 00058 typedef enum 00059 { 00060 XVCFI_COMPLETE = 0, 00061 XVCFI_LEFT = 1, 00062 XVCFI_RIGHT = 2, 00063 XVCFI_BOTH = 3 00064 } CoverageEnum; 00065 00067 typedef enum 00068 { 00069 XVCFI_COMBINE = 0, 00070 XVCFI_AOS_LOS = 1, 00071 XVCFI_PHYSICAL = 2, 00072 XVCFI_FROM_FILE = 3 00073 } MaskEnum; 00074 00076 typedef enum 00077 { 00078 XVCFI_STAR_UNDEFINED = 0, 00079 XVCFI_STAR_UPPER = 1, 00080 XVCFI_STAR_LOWER = 2, 00081 XVCFI_STAR_LEFT = 3, 00082 XVCFI_STAR_RIGHT = 4 00083 } CoverageStarEnum; 00084 00086 typedef enum 00087 { 00088 XVCFI_ASCENDING = 0, 00089 XVCFI_DESDENDING = 1 00090 } TimeSegmentsOrbitDirectionEnum; 00091 00093 typedef enum 00094 { 00095 XVCFI_NO_VIS = -1, 00096 XVCFI_ZONE_VIS = 0, 00097 XVCFI_STATION_VIS = 1, 00098 XVCFI_MULTI_ZONES_VIS = 2, 00099 XVCFI_MULTI_STATIONS_VIS = 3, 00100 XVCFI_MAPPING_VIS = 4, 00101 XVCFI_SC_VIS = 5, 00102 XVCFI_STAR_VIS = 6 00103 } VisibilityTypeEnum; 00104 00106 typedef enum 00107 { 00108 XVCFI_SAT_DEFAULT = XLCFI_SAT_DEFAULT, 00109 XVCFI_SAT_DEFAULT1 = XLCFI_SAT_DEFAULT1, 00110 XVCFI_SAT_DEFAULT2 = XLCFI_SAT_DEFAULT2, 00111 XVCFI_SAT_DEFAULT3 = XLCFI_SAT_DEFAULT3, 00112 XVCFI_SAT_DEFAULT4 = XLCFI_SAT_DEFAULT4, 00113 XVCFI_SAT_DEFAULT5 = XLCFI_SAT_DEFAULT5, 00114 XVCFI_SAT_DEFAULT6 = XLCFI_SAT_DEFAULT6, 00115 XVCFI_SAT_DEFAULT7 = XLCFI_SAT_DEFAULT7, 00116 XVCFI_SAT_DEFAULT8 = XLCFI_SAT_DEFAULT8, 00117 XVCFI_SAT_DEFAULT9 = XLCFI_SAT_DEFAULT9, 00118 XVCFI_SAT_ERS1 = XLCFI_SAT_ERS1, 00119 XVCFI_SAT_ERS2 = XLCFI_SAT_ERS2, 00120 XVCFI_SAT_ENVISAT = XLCFI_SAT_ENVISAT, 00121 XVCFI_SAT_METOP1 = XLCFI_SAT_METOP1, 00122 XVCFI_SAT_METOP2 = XLCFI_SAT_METOP2, 00123 XVCFI_SAT_METOP3 = XLCFI_SAT_METOP3, 00124 XVCFI_SAT_CRYOSAT = XLCFI_SAT_CRYOSAT, 00125 XVCFI_SAT_ADM = XLCFI_SAT_ADM, 00126 XVCFI_SAT_GOCE = XLCFI_SAT_GOCE, 00127 XVCFI_SAT_SMOS = XLCFI_SAT_SMOS, 00128 XVCFI_SAT_TERRASAR = XLCFI_SAT_TERRASAR, 00129 XVCFI_SAT_EARTHCARE = XLCFI_SAT_EARTHCARE, 00130 XVCFI_SAT_SWARM_A = XLCFI_SAT_SWARM_A, 00131 XVCFI_SAT_SWARM_B = XLCFI_SAT_SWARM_B, 00132 XVCFI_SAT_SWARM_C = XLCFI_SAT_SWARM_C, 00133 XVCFI_SAT_SENTINEL_1A = XLCFI_SAT_SENTINEL_1A, 00134 XVCFI_SAT_SENTINEL_1B = XLCFI_SAT_SENTINEL_1B, 00135 XVCFI_SAT_SENTINEL_2 = XLCFI_SAT_SENTINEL_2, 00136 XVCFI_SAT_SENTINEL_3 = XLCFI_SAT_SENTINEL_3, 00137 XVCFI_SAT_SEOSAT = XLCFI_SAT_SEOSAT, 00138 XVCFI_SAT_SENTINEL_1C = XLCFI_SAT_SENTINEL_1C, 00139 XVCFI_SAT_SENTINEL_2A = XLCFI_SAT_SENTINEL_2A, 00140 XVCFI_SAT_SENTINEL_2B = XLCFI_SAT_SENTINEL_2B, 00141 XVCFI_SAT_SENTINEL_2C = XLCFI_SAT_SENTINEL_2C, 00142 XVCFI_SAT_SENTINEL_3A = XLCFI_SAT_SENTINEL_3A, 00143 XVCFI_SAT_SENTINEL_3B = XLCFI_SAT_SENTINEL_3B, 00144 XVCFI_SAT_SENTINEL_3C = XLCFI_SAT_SENTINEL_3C, 00145 XVCFI_SAT_JASON_CSA = XLCFI_SAT_JASON_CSA, // AN-531 00146 XVCFI_SAT_JASON_CSB = XLCFI_SAT_JASON_CSB, // AN-531 00147 XVCFI_SAT_METOP_SG_A1 = XLCFI_SAT_METOP_SG_A1, // AN-530 00148 XVCFI_SAT_METOP_SG_A2 = XLCFI_SAT_METOP_SG_A2, // AN-530 00149 XVCFI_SAT_METOP_SG_A3 = XLCFI_SAT_METOP_SG_A3, // AN-530 00150 XVCFI_SAT_METOP_SG_B1 = XLCFI_SAT_METOP_SG_B1, // AN-530 00151 XVCFI_SAT_METOP_SG_B2 = XLCFI_SAT_METOP_SG_B2, // AN-530 00152 XVCFI_SAT_METOP_SG_B3 = XLCFI_SAT_METOP_SG_B3, // AN-530 00153 XVCFI_SAT_SENTINEL_5P = XLCFI_SAT_SENTINEL_5P, // AN-502 00154 XVCFI_SAT_GENERIC = XLCFI_SAT_GENERIC, 00155 // AN-353 00156 XVCFI_SAT_GENERIC_GEO = XLCFI_SAT_GENERIC_GEO, 00157 XVCFI_SAT_MTG = XLCFI_SAT_MTG, 00158 // END AN-353 00159 XVCFI_SAT_GENERIC_MEO = XLCFI_SAT_GENERIC_MEO // AN-550 00160 00161 } SatIdVisibilityEnum; 00162 00163 // AN-468 00165 typedef enum 00166 { 00167 XVCFI_FILE_AUTO, 00168 XVCFI_FILE_SDF, 00169 XVCFI_FILE_STF, 00170 XVCFI_SDF_DATA, 00171 XVCFI_STF_DATA 00172 } XVSwathInitEnum; 00173 00175 typedef enum 00176 { 00177 XVCFI_USE_ZONE_DB_FILE, 00178 XVCFI_USE_ZONE_DATA 00179 } XVZoneTypeEnum; 00180 00182 typedef enum 00183 { 00184 XVCFI_DO_NOT_COMPUTE = 0, 00185 XVCFI_COMPUTE = 1 00186 } XVComputeFlagEnum; 00187 00189 typedef enum 00190 { 00191 XVCFI_USE_STATION_FILE, 00192 XVCFI_USE_STATION_DATA, 00193 XVCFI_USE_STATION_FILE_AND_MASK_OVERRIDE, 00194 XVCFI_USE_STATION_DATA_AND_MASK_OVERRIDE 00195 } XVStationTypeEnum; 00196 00198 typedef enum 00199 { 00200 XVCFI_UTC_TYPE, 00201 XVCFI_ORBIT_TYPE, 00202 XVCFI_BOTH_TYPE 00203 } XVTimeTypeEnum; 00204 // END AN-468 00205 00207 typedef enum 00208 { 00209 XVCFI_COVERAGE_FIXED_DISTANCE, 00210 XVCFI_COVERAGE_PERCENTAGE_PRECISION 00211 } XVTypeCoverageEnum; // AN-505 00212 00213 00214 //------------------------------------------------------ 00215 // DATA STRUCTURES 00216 //------------------------------------------------------ 00218 class VisExtraInfo 00219 { 00220 // No atributes 00221 }; 00222 00224 class ZoneExtraInfo : public VisExtraInfo 00225 { 00226 public: 00227 00228 // AN-468 00229 string zoneId; 00230 // END AN-468 00231 long coverage; 00232 00233 }; 00234 00236 class StationExtraInfo : public VisExtraInfo 00237 { 00238 public: 00239 00240 // AN-468 00241 string stationId; 00242 double utcTime; 00243 // END AN-468 00244 // Zero doppler segments ( ONLY used in stationVisTime ). 00245 ANXTime zdop; 00246 }; 00247 00249 class MultiZonesExtraInfo : public VisExtraInfo 00250 { 00251 public: 00252 00253 long numberOfZones; 00254 vector<long> zonesInSegment; 00255 vector<long> multiCoverage; 00256 // AN-468 00257 vector<string> zoneNamesInSegment; 00258 }; 00259 00261 class MultiStationsExtraInfo : public VisExtraInfo 00262 { 00263 public: 00264 00265 long numberOfStations; 00266 vector<long> stationsInSegment; 00267 vector<ANXTime> multiZdop; 00268 // AN-468 00269 vector<string> stationNamesInSegment; 00270 vector<double> utcTime; 00271 }; 00272 00274 class MappingExtraInfo : public VisExtraInfo 00275 { 00276 public: 00277 00278 long coverage; 00279 long direction; 00280 // AN-468 00281 string zoneId; 00282 // END AN-468 00283 00284 }; 00285 00287 class StarExtraInfo : public VisExtraInfo 00288 { 00289 public: 00290 00291 long startCoverage; 00292 long stopCoverage; 00293 }; 00294 00296 class OrbitExtraInfo 00297 { 00298 public: 00299 vector<double> szaUp; 00300 vector<double> szaDown; 00301 double eclipseEntry; 00302 double eclipseExit; 00303 double sunMoonEntry; 00304 double sunMoonExit; 00305 }; 00306 00308 class ScfAppear 00309 { 00310 public: 00311 long colour; 00312 long draw; 00313 long fill; 00314 long opacity; 00315 }; 00316 00317 // AN-430 00319 class AzElMask 00320 { 00321 public: 00322 long numMaskPt; 00323 long status; 00324 00325 00326 00327 00328 00329 00330 00331 00332 00333 00334 00335 00336 double azimuth[MaxStationVertices]; 00337 double elevation[MaxStationVertices]; 00338 }; 00339 00341 class LinkMask 00342 { 00343 public: 00344 AzElMask inclMask; 00345 AzElMask exclMask; 00346 }; 00347 00349 class LinkData 00350 { 00351 public: 00352 LinkMask maskData; 00353 double minTgHeight; 00354 }; 00355 // End AN-430 00356 00357 // AN-468 00359 class SwathInfo 00360 { 00361 public: 00362 long type; 00363 string filename; 00364 SdfFile sdfFile; 00365 StfFile stfFile; 00366 long nofRegenOrbits; 00367 00368 SwathInfo() 00369 { 00370 // Empty 00371 } 00372 00373 SwathInfo(long typeIn, string fileIn, SdfFile &sdfFileIn, StfFile &stfFileIn, long nofIn) 00374 { 00375 type = typeIn; 00376 switch(type) 00377 { 00378 case XVCFI_FILE_AUTO: 00379 case XVCFI_FILE_STF: 00380 case XVCFI_FILE_SDF: 00381 { 00382 filename = fileIn; 00383 break; 00384 } 00385 00386 case XVCFI_STF_DATA: 00387 { 00388 stfFile = stfFileIn; 00389 break; 00390 } 00391 00392 case XVCFI_SDF_DATA: 00393 { 00394 sdfFile = sdfFileIn; 00395 break; 00396 } 00397 } 00398 00399 nofRegenOrbits = nofIn; 00400 } 00401 }; 00402 00403 // AN-468 00405 class SwathIdData 00406 { 00407 public: 00408 long type; 00409 string filename; 00410 SdfFile sdfFile; 00411 StfFile stfFile; 00412 long nofRegenOrbits; 00413 long orbitRef; 00414 long valOrbitStart; 00415 long valOrbitStop; 00416 00417 SwathIdData() 00418 { 00419 // Empty 00420 } 00421 00422 SwathIdData(long typeIn, string fileIn, SdfFile &sdfFileIn, StfFile &stfFileIn, long nofIn, 00423 long refOrb, long val0, long val1) 00424 { 00425 type = typeIn; 00426 orbitRef = refOrb; 00427 valOrbitStart = val0; 00428 valOrbitStop = val1; 00429 00430 switch(type) 00431 { 00432 case XVCFI_FILE_AUTO: 00433 case XVCFI_FILE_STF: 00434 case XVCFI_FILE_SDF: 00435 { 00436 filename = fileIn; 00437 break; 00438 } 00439 00440 case XVCFI_STF_DATA: 00441 { 00442 stfFile = stfFileIn; 00443 break; 00444 } 00445 00446 case XVCFI_SDF_DATA: 00447 { 00448 sdfFile = sdfFileIn; 00449 break; 00450 } 00451 } 00452 00453 nofRegenOrbits = nofIn; 00454 } 00455 }; 00456 00458 class VisTime 00459 { 00460 public: 00461 long type; 00462 double utcTime; 00463 long orbitNum; 00464 long sec; 00465 long msec; 00466 00467 VisTime() 00468 { 00469 type = 0; 00470 utcTime = 0.; 00471 orbitNum = 0; 00472 sec = 0; 00473 msec = 0; 00474 } 00475 VisTime(long typeIn, double utcIn, long orbitNumIn, 00476 long secIn, long msecIn) 00477 { 00478 type = typeIn; 00479 utcTime = utcIn; 00480 orbitNum = orbitNumIn; 00481 sec = secIn; 00482 msec = msecIn; 00483 } 00484 }; 00485 00487 class VisTimeInterval 00488 { 00489 public: 00490 VisTime tstart; 00491 VisTime tstop; 00492 00493 VisTimeInterval() 00494 { 00495 } 00496 00497 VisTimeInterval(VisTime t0, VisTime t1) 00498 { 00499 tstart = t0; 00500 tstop = t1; 00501 } 00502 }; 00503 00505 class ZoneInfo 00506 { 00507 public: 00508 00509 string zoneId; 00510 long type; 00511 string zoneDBFilename; 00512 ZoneRec zoneData; 00513 long projection; 00514 double minDuration; 00515 00517 ZoneInfo() 00518 { 00519 zoneId = ""; 00520 type = 0; 00521 zoneDBFilename = ""; 00522 projection = 0; 00523 minDuration = 0.; 00524 } 00525 00527 ZoneInfo( string zoneIdIn, string zoneDBIn, 00528 long projIn, long durIn) 00529 { 00530 type = XVCFI_USE_ZONE_DB_FILE; 00531 zoneId = zoneIdIn; 00532 zoneDBFilename = zoneDBIn; 00533 projection = projIn; 00534 minDuration = durIn; 00535 } 00536 00538 ZoneInfo( ZoneRec zoneIn, long projIn, long durIn) 00539 { 00540 type = XVCFI_USE_ZONE_DATA; 00541 zoneData = zoneIn; 00542 projection = projIn; 00543 minDuration = durIn; 00544 } 00545 00546 }; 00547 00549 class ZoneInfoList 00550 { 00551 public: 00552 00553 long calcFlag; 00554 vector<ZoneInfo> zoneInfo; 00555 00557 ZoneInfoList() 00558 { 00559 calcFlag = XVCFI_COMPUTE; 00560 } 00561 00563 ZoneInfoList( long calcFlagIn, vector<ZoneInfo> zoneInfoIn) 00564 { 00565 calcFlag = calcFlagIn; 00566 zoneInfo = zoneInfoIn; 00567 } 00568 00569 }; 00570 00580 class StationInfo 00581 { 00582 public: 00583 00584 long type; 00585 string stationId; 00586 string stationDBFilename; 00587 StationRec stationData; 00588 double defaultAos; 00589 double defaultLos; 00590 long defaultMask; 00591 double minDuration; 00592 00594 StationInfo() 00595 { 00596 stationId = ""; 00597 type = 0; 00598 stationDBFilename = ""; 00599 defaultAos = 0.; 00600 defaultLos = 0.; 00601 defaultMask = 0; 00602 minDuration = 0.; 00603 } 00604 00606 StationInfo( long typeIn, string stationIdIn, string stationDBIn, 00607 double defaultAosIn, double defaultLosIn, long defaultMaskIn, 00608 double durIn) 00609 { 00610 type = typeIn; 00611 stationId = stationIdIn; 00612 stationDBFilename = stationDBIn; 00613 defaultAos = defaultAosIn; 00614 defaultLos = defaultLosIn; 00615 defaultMask = defaultMaskIn; 00616 minDuration = durIn; 00617 } 00618 00619 StationInfo( long typeIn, StationRec staIn, 00620 double defaultAosIn, double defaultLosIn, long defaultMaskIn, 00621 double durIn) 00622 { 00623 type = typeIn; 00624 stationData = staIn; 00625 defaultAos = defaultAosIn; 00626 defaultLos = defaultLosIn; 00627 defaultMask = defaultMaskIn; 00628 minDuration = durIn; 00629 } 00630 }; 00631 00633 class StationInfoList 00634 { 00635 public: 00636 00637 long calcFlag; 00638 vector<StationInfo> stationInfo; 00639 00641 StationInfoList() 00642 { 00643 calcFlag = XVCFI_COMPUTE; 00644 } 00645 00647 StationInfoList( long calcFlagIn, vector<StationInfo> staInfoIn) 00648 { 00649 calcFlag = calcFlagIn; 00650 stationInfo = staInfoIn; 00651 } 00652 00653 }; 00654 00656 class SwathPoint 00657 { 00658 public: 00659 double lon; 00660 double lat; 00661 double alt; 00662 00664 SwathPoint(double lonIn, double latIn, double altIn) 00665 { 00666 lon = lonIn; 00667 lat = latIn; 00668 alt = altIn; 00669 } 00670 } ; 00671 00673 class SwathPointList 00674 { 00675 public: 00676 vector<SwathPoint> swathPoint; 00677 00679 SwathPointList(vector<SwathPoint> list) 00680 { 00681 swathPoint = list; 00682 } 00683 }; 00684 00685 // END 468 00686 00687 } // closing namespace 00688 00689 #endif