Skip to content
beneR-89 edited this page Mar 12, 2014 · 7 revisions

The concept behind OpenIndy envisages that every feature can be solved by one or more functions. Hence you can assign as many functions as you want to a feature. The order of those functions is important, because they will be executed in the same order as they were assigned to a feature. This concept of assigning multiple functions to a feature is illustrated in the following diagram.

The first function that is assigned to a feature solves it and each additional function changes the previously solved feature. Thereby each function can calculate statistical values for the feature using variance propagation. In OpenIndy there are five different types of functions which are described in the following table.
function type description
fit function If overdetermination is present, fit functions have the purpose to calculate the adjusted parameters of a geometry by using observations. So for example a fit function can calculate the center of n xyz-observations.
construct function Construct functions are used to calculate geometries by using other geometries. For example the intersection of a line and a plane results in a new point.
geodetic function Geodetic functions are intended to calculate special geodetic tasks like spatial intersection etc..
object transformation In contrast to fit- and construct functions, object transformations do not define a geometry, but change a previously defined one. A point which has been fit before can for instance be moved along a line by a certain amount.
system transformation System transformations are used to calculate the parameters of a transformation from one coordinate system to another one.

While object transformations can only be assigned to a feature that was previously solved by another function, the other function types are meant to solve a feature so functions of those types can only be assigned to a feature once and only as the first function. (For example you cannot shift a point that has never been solved.) To better understand this concept let us consider a concrete example:

In OpenIndy you can for example create a point feature which you then can measure with a sensor of your choice. This results in n observations and precision values for each of those observations. When you now add the function "Best Fit" to the point feature you get the adjusted coordinates of the point. Therefor the function "Best Fit" uses the n observations and their precision values. Besides the adjusted coordinates this function also calculates the covariance matrix ∑XX with the accuracy of the parameters of the point (X,Y,Z) and their correlation. Now let us assume that you want to shift the adjusted point along the normal vector of a plane by a specified amount. So you add another function "Translate by Plane" to the point. This function needs a plane and a distance to be executed, so you have to input a plane and a distance which may both have been solved by a chain of functions before. In summary the function "Translate by Plane" gets the adjusted point with its covariance matrix, a plane with a covariance matrix and a distance with its accuracy as input. Because this function knows its functional relationship it is able do variance propagation. As the result you get the covariance matrix of the shifted point and, of course, the coordinates of the shifted point itself. OpenIndy allows you to implement you own functions. Therefor you have to write a plugin (or extend an existing one). How this works is described [here](https://github.com/OpenIndy/OiPluginTemplate/wiki).