...
The moving object algebra defines some functions that work directly on temporal attributes and therefore do not need this kind of translation described above. An example would be the SpeedFunction
from the spatio-temporal feature. It takes a temporal spatial point (tpoint) and creates a tdouble with the speed of the object at each point in time. A direct temporal function implements the interface TemporalFunction
. If the temporal function does not return a temporal value itself, but a non-temporal , it also implements the interface RemoveTemporalFunction
. An example would be the TrajectoryFunction
from the spatio-temporal feature, which gets a tpoint and creates a non-temporal trajectory, i.e., a spatial LineString.
...
Combining Functions in Mixed Expressions
Anchor | ||||
---|---|---|---|---|
|
As of now, there is a limitation when combining When mixing direct temporal functions and normal functions in one expression. In that case, Odysseus creates an error message and you have to split your expression in multiple consecutive map operators. This is because the temporal feature creates a TemporalRelationalExpression
for the whole expression, which then evaluates it in a non-temporal way. Unfortunately, the temporal function needs a temporal value as its input and not a non-temporal value. Splitting the expression in two parts helps here, as the following example shows (already existing in Odysseus, need non-temporal input values), a MixedTemporalExpression
is created. As a user you don't have to worry about this and can simply use them as if they were not-mixed expressions. Except - it could be that they are a little slower. From a functional aspect, they are identical as if a normal TemporalRelationalExpression
is used. The following example shows a mixed expression with Trajectory
being a direct temporal function and SpatialLength
a normal non-temporal function:
Code Block |
---|
// Not possible You can combine these two ... calcTraj = MAP( { expressions = [[ ’ SpatialLength ( Trajectory ( tempSpatialPoint , PredictionTimes ) ) ’ , ’traj’ traj ’]], keepinput = true } , predTime ) // Possible calcTraj = MAP( { expressions = [[ ’ Trajectory ( tempSpatialPoint , PredictionTimes ) ’ , ’ traj ’’SpatialLength(traj)’,’len’]], keepinput = true } , predTimecalcTraj ) // ... into this mixed expression calcTraj = MAP( { expressions = [[’SpatialLength(traj)’,’len’ ’ SpatialLength ( Trajectory ( tempSpatialPoint , PredictionTimes ) ) ’ , ’traj ’]], keepinput = true } , calcTrajpredTime ) |
Operators
As a user, you can use the normal operators as you would without using temporal attributes. Nevertheless, the operators behave a little different. Their behavior with the temporal feature is explained in the following. Additionally, you need to define the PredictionTime
, which is done with the PredictionTime
operator. Additionally, you need to create some temporal attributes. We call this process temporalization, which is also explained in the following.
...