123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- <h2>DESCRIPTION</h2>
- <em>t.select</em> performs selection of maps that are registered in
- space time datasets using temporal algebra.
- <h3>PROGRAM USE</h3>
- The module expects an <b>expression</b> as input parameter in the following form:
- <p>
- <tt>"result = expression"</tt>
- <p>
- The statement structure is similar to r.mapcalc, see <a href="r.mapcalc.html">r.mapcalc</a>.
- Where <b>result</b> represents the name of a space time dataset
- (STDS)that will contain the result of the calculation that is given as
- <b>expression</b> on the right side of the equality sign.
- These expression can be any valid or nested combination of temporal
- operations and functions that are provided by the temporal algebra.
- <br>
- The temporal algebra works with space time datasets of any type
- (STRDS, STR3DS and STVDS). The algebra provides methods for map
- selection from STDS based on their temporal relations. It is also
- possible to temporally shift maps, to create temporal buffer and to
- snap time instances to create a valid temporal topology. Furthermore
- expressions can be nested and evaluated in conditional statements (if,
- else statements). Within if-statements the algebra provides temporal
- variables like start time, end time, day of year, time differences or
- number of maps per time interval to build up conditions. These
- operations can be assigned to space time datasets or to the results of
- operations between space time datasets.
- <p>
- The type of the input space time datasets must be defined with the input
- parameter <b>type</b>. Possible options are STRDS, STVDS or STR3DS.
- The default is set to space time raster datasets (STRDS).
- <p>
- As default, topological relationships between space time datasets will be
- evaluated only temporal. Use the <b>s</b> flag to activate the
- additionally spatial topology evaluation.
- <p>
- The expression option must be passed as <b>quoted</b>
- expression, for example: <br>
- <div class="code"><pre>
- t.select expression="C = A : B"
- </pre></div>
- Where <b>C</b> is the new space time raster dataset that will contain maps
- from <b>A</b> that are selected by equal temporal relationships
- to the existing dataset <b>B</b> in this case.
- <h2>TEMPORAL ALGEBRA</h2>
- The temporal algebra provides a wide range of temporal operators and
- functions that will be presented in the following section.
- <h3>TEMPORAL RELATIONS</h3>
- Several temporal topology relations between registered maps of space
- time datasets are supported: <br>
- <div class="code"><pre>
- equals A ------
- B ------
- during A ----
- B ------
- contains A ------
- B ----
- starts A ----
- B ------
- started A ------
- B ----
- finishs A ----
- B ------
- finished A ------
- B ----
- precedes A ----
- B ----
- follows A ----
- B ----
- overlapped A ------
- B ------
- overlaps A ------
- B ------
- over booth overlaps and overlapped
- </pre></div>
- The relations must be read as: A is related to B, like - A equals B - A is
- during B - A contains B <p>
- Topological relations must be specified in {} parentheses. <br>
- <h3>TEMPORAL OPERATORS</h3>
- The temporal algebra defines temporal operators that can be combined with other
- operators to perform spatio-temporal operations.
- The temporal operators process the time instances and intervals of two temporal
- related maps and calculate the result temporal extent by five different possibilities.
- <div class="code"><pre>
- LEFT REFERENCE l Use the time stamp of the left space time dataset
- INTERSECTION i Intersection
- DISJOINT UNION d Disjoint union
- UNION u Union
- RIGHT REFERENCE r Use the time stamp of the right space time dataset
- </pre></div>
- <h3>TEMPORAL SELECTION</h3>
- The temporal selection simply selects parts of a space time dataset without
- processing raster or vector data.
- The algebra provides a selection operator <b>:</b> that selects parts
- of a space time dataset that are temporally equal to parts of a second one
- by default. The following expression
- <div class="code"><pre>
- C = A : B
- </pre></div>
- means: Select all parts of space time dataset A that are equal to B and store
- it in space time dataset C. The parts are time stamped maps. <p>
- In addition the inverse selection operator <b>!:</b> is defined as the
- complement of the selection operator, hence the following expression
- <div class="code"><pre>
- C = A !: B
- </pre></div>
- means: select all parts of space time time dataset A that are not equal to B
- and store it in space time dataset (STDS) C. <p>
- To select parts of a STDS by different topological relations to other STDS,
- the temporal topology selection operator can be used. The operator consists of
- the temporal selection operator, the topological relations, that must be separated
- by the logical OR operator <b>|</b> and the temporal extent operator.
- All three parts are separated by comma and surrounded by curly braces:
- <div class="code"><pre>
- {"temporal selection operator", "topological relations", "temporal operator"}
- </pre></div>
- Examples:
- <div class="code"><pre>
- C = A {:, equals} B
- C = A {!:, equals} B
- </pre></div>
- We can now define arbitrary topological relations using the OR operator "|"
- to connect them:
- <div class="code"><pre>
- C = A {:,equals|during|overlaps} B
- </pre></div>
- Select all parts of A that are equal to B, during B or overlaps B. <br>
- In addition we can define the temporal extent of the result STDS by adding the
- temporal operator.
- <div class="code"><pre>
- C = A {:, during,r} B
- </pre></div>
- Select all parts of A that are during B and use the temporal extents from B for
- C. <br>
- <br>
- The selection operator is implicitly contained in the temporal topology
- selection operator, so that the following statements are exactly the same:
- <div class="code"><pre>
- C = A : B
- C = A {:} B
- C = A {:,equal} B
- C = A {:,equal,l} B
- </pre></div>
- Same for the complementary selection:
- <div class="code"><pre>
- C = A !: B
- C = A {!:} B
- C = A {!:,equal} B
- C = A {!:,equal,l} B
- </pre></div>
- <h3>CONDITIONAL STATEMENTS</h3>
- Selection operations can be evaluated within conditional statements.
- <br>
- <div class="code"><pre>
- Note A and B can either be space time datasets or expressions. The temporal
- relationship between the conditions and the conclusions can be defined at the
- beginning of the if statement. The relationship between then and else conclusion
- must be always equal.
- if statement decision option temporal relations
- if(if, then, else)
- if(conditions, A) A if conditions are True; temporal topological relation between if and then is equal.
- if(conditions, A, B) A if conditions are True, B otherwise; temporal topological relation between if, then and else is equal.
- if(topologies, conditions, A) A if conditions are True; temporal topological relation between if and then is explicit specified by topologies.
- if(topologies, conditions, A, B) A if conditions are True, B otherwise; temporal topological relation between if, then and else is explicit specified by topologies.
- </pre></div>
- The conditions are comparison expressions that are used to evaluate
- space time datasets. Specific values of temporal variables are
- compared by logical operators and evaluated for each map of the STDS.<br>
- <b>Important:</b> The conditions are evaluated from left to right.
- <h4>Logical operators</h4>
- <div class="code"><pre>
- Symbol description
- == equal
- != not equal
- > greater than
- >= greater than or equal
- < less than
- <= less than or equal
- && and
- || or
- </pre></div>
- <h4>Temporal functions</h4>
- The following temporal function are evaluated only for the STDS that must
- be given in parenthesis.
- <div class="code"><pre>
- td(A) Returns a list of time intervals of STDS A
- start_time(A) Start time as HH::MM:SS
- start_date(A) Start date as yyyy-mm-DD
- start_datetime(A) Start datetime as yyyy-mm-DD HH:MM:SS
- end_time(A) End time as HH:MM:SS
- end_date(A) End date as yyyy-mm-DD
- end_datetime(A) End datetime as yyyy-mm-DD HH:MM
- start_doy(A) Day of year (doy) from the start time [1 - 366]
- start_dow(A) Day of week (dow) from the start time [1 - 7], the start of the week is Monday == 1
- start_year(A) The year of the start time [0 - 9999]
- start_month(A) The month of the start time [1 - 12]
- start_week(A) Week of year of the start time [1 - 54]
- start_day(A) Day of month from the start time [1 - 31]
- start_hour(A) The hour of the start time [0 - 23]
- start_minute(A) The minute of the start time [0 - 59]
- start_second(A) The second of the start time [0 - 59]
- end_doy(A) Day of year (doy) from the end time [1 - 366]
- end_dow(A) Day of week (dow) from the end time [1 - 7], the start of the week is Monday == 1
- end_year(A) The year of the end time [0 - 9999]
- end_month(A) The month of the end time [1 - 12]
- end_week(A) Week of year of the end time [1 - 54]
- end_day(A) Day of month from the start time [1 - 31]
- end_hour(A) The hour of the end time [0 - 23]
- end_minute(A) The minute of the end time [0 - 59]
- end_second(A) The second of the end time [0 - 59]
- </pre></div>
- <h4>Comparison operator</h4>
- The conditions are comparison expressions that are used to evaluate
- space time datasets. Specific values of temporal variables are
- compared by logical operators and evaluated for each map of the STDS and
- the related maps.
- For complex relations the comparison operator can be used to combine conditions:
- <br>
- The structure is similar to the select operator with the extension of an aggregation operator:
- {"comparison operator", "topological relations", aggregation operator, "temporal operator"}
- <br>
- This aggregation operator (| or &) define the behaviour if a map is related the more
- than one map, e.g for the topological relations 'contains'.
- Should all (&) conditions for the related maps be true or is it sufficient to
- have any (|) condition that is true. The resulting boolean value is then compared
- to the first condition by the comparison operator (|| or &&).
- As default the aggregation operator is related to the comparison operator: <br>
- Comparison operator -> aggregation operator:
- <div class="code"><pre>
- || -> | and && -> &
- </pre></div>
- Examples:
- <div class="code"><pre>
- Condition 1 {||, equal, r} Condition 2
- Condition 1 {&&, equal|during, l} Condition 2
- Condition 1 {&&, equal|contains, |, l} Condition 2
- Condition 1 {&&, equal|during, l} Condition 2 && Condition 3
- Condition 1 {&&, equal|during, l} Condition 2 {&&,contains, |, r} Condition 3
- </pre></div>
- <h4>Hash operator</h4>
- Additionally the number of maps in intervals can be computed and used in
- conditional statements with the hash (#) operator. <br>
- <div class="code"><pre>
- A{#, contains}B
- </pre></div>
- This expression computes the number of maps from space
- time dataset B which are during the time intervals of maps from
- space time dataset A.<br>
- A list of integers (scalars) corresponding to the maps of A
- that contain maps from B will be returned. <p>
- <div class="code"><pre>
- C = if({equal}, A {#, contains} B > 2, A {:, contains} B)
- </pre></div>
- This expression selects all maps from A that temporally contains at least 2
- maps from B and stores them in space time dataset C. The leading equal statement
- in the if condition specifies the temporal relation between the if and then part
- of the if expression. This is very important, so we do not need to specify a
- global time reference (a space time dataset) for temporal processing.
- <p>
- Furthermore the temporal algebra allows temporal buffering, shifting
- and snapping with the functions buff_t(), tshift() and tsnap()
- respectively.
- <div class="code"><pre>
- buff_t(A, size) Buffer STDS A with granule ("1 month" or 5)
- tshift(A, size) Shift STDS A with granule ("1 month" or 5)
- tsnap(A) Snap time instances and intervals of STDS A
- </pre></div>
- <br>
- <h4>Single map with temporal extent</h4>
- The temporal algebra can also handle single maps with time stamps in the
- map function.
- <div class="code"><pre>
- tmap()
- </pre></div>
- For example:
- <div class="code"><pre>
- C = A {:,during} tmap(event)
- </pre></div>
- This statement select all maps from space time data set A that are during
- the temporal extent of single map 'event'
- <br>
- <h2>Examples</h2>
- Select all maps from space time dataset A which have equal time stamps
- with space time dataset B and C and are earlier that Jan. 1. 2005 and
- store them in space time dataset D.
- <div class="code"><pre>
- D = if(start_date(A) < "2005-01-01", A : B : C)
- </pre></div>
- Select all maps from space time dataset A which contains more than three
- maps of space time dataset B, else select maps from C with time
- stamps that are not equal to A and store them in space time dataset D.
- <div class="code"><pre>
- D = if(A {#, contains} B > 3, A {:, contains} B, C)
- </pre></div>
- Select all maps from space time dataset B which are during the temporal
- buffered space time dataset A with a map interval of three days, else
- select maps from C and store them in space time dataset D.
- <div class="code"><pre>
- D = if(contains, td(buff_t(A, "1 days")) == 3, B, C)
- </pre></div>
- <h2>SEE ALSO</h2>
- <em>
- <a href="r.mapcalc.html">r.mapcalc</a>
- </em>
- <h2>REFERENCES</h2>
- <a href="http://www.dabeaz.com/ply/">PLY(Python-Lex-Yacc)</a>
- <h2>AUTHORS</h2>
- Thomas Leppelt, Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
- <p><i>Last changed: $Date$</i>
|