DEIMOS
Earth Observation Mission CFI Software
Visibility Software User Manual
ESA

EECFI::SwathId Class Reference

Class that stores the Swath data. More...

Inheritance diagram for EECFI::SwathId:
EECFI::CfiId EECFI::CfiClass

List of all members.

Public Member Functions

 SwathId (AtmosId &atmosId, SwathInfo &swathInfo)
 Class constructor.
 SwathId (SwathId &other)
virtual ~SwathId () EXCEPT
 Class destructor.
SwathIdData getData () const
 Get swath data.
void setData (const SwathIdData &swathInfo)
 Set swath data.
SwathIdoperator= (const SwathId &other)
ZoneCoverageOut zoneVisTimeCoverage (const ZoneCoverageIn &input) const
 The zoneVisTimeCoverage method computes the portion of the input zone that is covered by the input satellite in input time visibility segments.
void computeAoi (const OrbitId &orbitId, const VisTimeInterval &timeInterval, double min_lon, double max_lon, double min_lat, double max_lat, double lon[4], double lat[4]) const
 Compute the area of interest (aoi) based on SDF file and time interval.
The function provides the pre-calculation of an area of interest (aoi), which is defined by min/max lon/lat that includes the projection of all segments from the satellite to the intersection with the ellipsoid.

Protected Member Functions

void eraseObject ()
 Close swath id of object.

Detailed Description

Class that stores the Swath data.


Constructor & Destructor Documentation

EECFI::SwathId::SwathId ( AtmosId atmosIdIn,
SwathInfo swathInfo 
)
EECFI::SwathId::SwathId ( SwathId other  ) 

Copy constructor.

Parameters:
other The SwathId to copy from
EECFI::SwathId::~SwathId (  )  [virtual]

Class destructor.

References eraseObject().


Member Function Documentation

void EECFI::SwathId::computeAoi ( const OrbitId orbitId,
const VisTimeInterval timeInterval,
double  min_lon,
double  max_lon,
double  min_lat,
double  max_lat,
double  lon[4],
double  lat[4] 
) const

Compute the area of interest (aoi) based on SDF file and time interval.
The function provides the pre-calculation of an area of interest (aoi), which is defined by min/max lon/lat that includes the projection of all segments from the satellite to the intersection with the ellipsoid.

Parameters:
swathId Swath Id.
time_interval Time interval.
min_lon Minimum input longitude.
max_lon Maximum input longitude.
min_lat Minimum input latitude.
max_lat Maximum input latitude.
Returns:
Rectangle corners longitude lon = [min min max max] and latitude lat = [min max max min]

References EECFI::CfiError::addMsg(), EECFI::VisTime::msec, EECFI::VisTime::orbitNum, EECFI::VisTime::sec, EECFI::CfiId::status(), EECFI::CfiClass::throwWarn, EECFI::VisTimeInterval::tstart, EECFI::VisTimeInterval::tstop, EECFI::VisTime::type, and EECFI::VisTime::utcTime.

void EECFI::SwathId::eraseObject (  )  [protected]

Close swath id of object.

References EECFI::CfiId::status(), EECFI::CfiId::subtractInstance(), and EECFI::CfiClass::throwWarn.

Referenced by operator=(), and ~SwathId().

SwathIdData EECFI::SwathId::getData (  )  const

Get swath data.

Returns:
Swath id data.
SwathId & EECFI::SwathId::operator= ( const SwathId other  ) 

Copy assignment operator.

Parameters:
other The SwathId to copy/assign from
swathIdIn SwathId we want to copy.

References EECFI::CfiId::addInstance(), and eraseObject().

ZoneCoverageOut EECFI::SwathId::zoneVisTimeCoverage ( const ZoneCoverageIn input  )  const

The zoneVisTimeCoverage method computes the portion of the input zone that is covered by the input satellite in input time visibility segments.


Overview

The SwathId::zoneVisTimeCoverage function computes the portion of the input zone that is covered by a swath during a set of input time visibility intervals (also called segments). The user has to initialize the input structure of type ZonevisibilityCoverageIn in order to provide the required information for the computation: zone, swath, attitude definition, orbit_id, list of visibility times. Note that the visibilityIntervalList field is of type VisibilityList that is the output of the Swath::zoneVisTimeCompute method. The following outputs are returned in the ZonevisibilityCoverageOut object (assuming that intervals are numbered from 0 to N-1 as stored in the vector visibilityIntervalList, N is the number of elements in visibilityIntervalList vector):
  1. The area of the zone in Km2 (zoneArea field);
  2. The total coverage (totalCoverage field): this is the percentage of zone covered by all intervals, i.e. 100 minus the percentage of zone not covered by any interval;
  3. The coverage per interval (coveragePerInterval field): this is a vector of size N that contains the coverage percentages computed considering only one interval. Item of the vector with index i (0,1,2,......N-1) is the percentage of zone covered by the interval i (0,1,2,...N-1) only.
  4. The coverage per number of intervals (coverageByNIntervals field): this is a vector of size N that contains the percentages of zone covered by exactly 1,2,...,N intervals. Item with index i (0,1,2,...N-1) is the percentage of the zone covered by exactly i+1 (1,2,...N) intervals. This array can be used to evaluate how much segments are overlapping. Ideally, with segments not overlapping, only the first item of this array should be different from zero, and should be close to the total coverage. If other items of the array are different from zero, this means that portions of the zone are covered by more than one segment;
  5. The cumulative coverage (cumulativeCoverage field): this is a vector of size N that contains the cumulative coverage percentage. Item with index i (0,1,2,...N-1) is the percentage of zone covered by intervals 0,1,2...i+1 considered together. This output considers the order in which time segments are provided. For example, if intervals are sorted by time, this output can be used to evaluate when a target coverage percentage is reached.
The computation is performed by means of a grid of points inside the zone. The portion of these points that are within the swath gives the percentage of area covered. The precision of the computation then depends on the distance between points. Two ways of computing the points can be provided by the user via the type_coverage field:
  1. XVCFI_COVERAGE_FIXED_DISTANCE: a fixed distance between points is used. The value of these distance is provided by the user (in kilometers);
  2. XVCFI_COVERAGE_PERCENTAGE_PRECISION: the required percentage precision is provided by the user. The function computes internally the distance needed to achieve the requested precision. The distance is computed in a way that the area of the zone computed with the grid created with such distance is close to the expected one (computed by analytical methods) by a percentage equal or better than input percentage precision. That is, if area_zone is the zone area computed analytically and area_grid is the area of the zone computed with the grid, the accuracy percentage is defined as:
    percen_accuracy = 100. * (1- abs( (area_zone-area_grid) / area_zone) )
    The selected distance fulfills that percen_accuracy is greater or equal to input percentage precision. That means that the closer the input percentage precision to 100% the more accurate are the computations.
WARNING: The user has to be aware that requesting a small distance or a big value for precision increase the number of points to be analyzed and this has an impact on performances. The following example is presented to explain how this function operates:
A simplified representation of the input zone is given in Fig. 1: the zone is split into 10 tiles of same size. Three time intervals are provided as input, they are identified with their indexes: 0,1,2
During time interval 0, tiles 2,3,4 are covered, see Fig. 2.
During time interval 1, tiles 3,4,5,6 are covered, see. Fig. 3
During time interval 2, tiles 4,5,6,7,8 are covered, see Fig. 4.
Considering all three segments, 7 tiles of the zone (2 to 8) are covered, this corresponds to 70% of the whole zone (see Fig. 5). Therefore, if cov_out is the output variable of type ZonevisibilityCoverageOut:
cov_out.totalCoverage = 70
intervals 0,1,2 cover respectively 3,4,5 tiles corresponding to 30%, 40%, 50% of the whole zone. Therefore:
cov_out.coveragePerInterva[0] = 30
cov_out.coveragePerInterva[1] = 40
cov_out.coveragePerInterva[2] = 50
Fig. 6 details the computation of the coverageByNIntervals field. Tiles with same colors are covered by the same number of segments.
Tile 2 is covered only by interval 0. Tiles 7,8 are covered only by interval 4. Therefore tiles 2,7,8 are covered by only one interval. This corresponds to 30% of the whole zone. Therefore:
cov_out.coverage_ByNIntervals[0] = 30

Similarly tiles 3,5,6 are covered by only 2 intervals and tile 4 is covered by all 3 segments. Therefore:
cov_out.coverageByNIntervals[1] = 30
cov_out.coverageByNIntervals[2] = 10
Fig. 7 details the computation of the cumulativeCoverage field. Tiles with same color are those tiles that are covered by a segment but not but the previous ones in the list.
Item 0 is the coverage of the first segment only, that is tiles 2,3,4, i.e. 30%.
Item 1 is the cumulative coverage of the first and second segments, that is tiles 2,3,4,5,6, that is 50%.
item 2 is the cumulative coverage of the first the second and third segment, that is tiles 2,3,4,5,6,7,8 that is 70%. Therefore:
cov_out.cumulativeCoverage [0] = 30
cov_out.cumulativeCoverage [1] = 50
cov_out.cumulativeCoverage [2] = 70
Parameters:
input Inputs for zone coverage computation.
Returns:
Coverage results.

References EECFI::ZoneCoverageOut::coverageByNIntervals, EECFI::ZoneCoverageOut::coveragePerInterval, EECFI::ZoneRec::creator, EECFI::ZoneCoverageOut::cumulativeCoverage, EECFI::ZoneRec::description, EECFI::AttitudeDef::instrTransId, EECFI::ZoneInfo::minDuration, EECFI::ZoneCoverageIn::percentPrecision, EECFI::ZoneCoverageIn::pointGeodDistance, EECFI::ZoneRec::projection, EECFI::ZoneInfo::projection, EECFI::AttitudeDef::satNomTransId, EECFI::AttitudeDef::satTransId, EECFI::CfiId::status(), EECFI::ZoneRec::surface, EECFI::CfiClass::throwWarn, EECFI::ZoneCoverageOut::totalCoverage, EECFI::ZoneInfo::type, EECFI::AttitudeDef::type, EECFI::ZoneCoverageIn::typeCoverage, EECFI::ZoneCoverageOut::zoneArea, EECFI::ZoneInfo::zoneData, EECFI::ZoneInfo::zoneDBFilename, EECFI::ZoneRec::zoneDiam, EECFI::ZoneRec::zoneId, EECFI::ZoneInfo::zoneId, EECFI::ZoneRec::zonePoint, and EECFI::ZoneRec::zoneType.


Generated on Mon Dec 11 2023 13:28:33 for by doxygen 1.7.1