Tracktable Point Domains

Module contents

Point domains are how we keep track of the different coordinate systems and sets of units that points can use. For each domain we specify (1) a native coordinate system, (2) an ordering for coordinates if appropriate, and (3) units for measuring position, distance and speed. In addition, each domain defines the following types:

base_point_type: Point with coordinates only. This is descended from tracktable::core::PointBase.

trajectory_point_type: Point with coordinates, timestamp, ID and properties. This behaves like tracktable::core::TrajectoryPoint<base_point_type>.

linestring_type: Vector of bare points. Boost’s Geometry library will recognize this as a model of Linestring.

trajectory_type: Vector of trajectory points with its own ID and user-defined properties.

base_point_reader_type: PointReader for the domain’s bare point type. This is an instance of tracktable::rw::PointReader<base_point_type>.

trajectory_point_reader_type: PointReader for the domain’s trajectory point type. This is an instance of tracktable::rw::PointReader<trajectory_point_type>.

We also provide specializations of all the appropriate measurement functions that return their results in the domain’s units. This part is done behind the scenes with templates and should be invisible to the user. You simply call tracktable::distance() (for example) and trust that the units will be kilometers (for the Terrestrial domain).

In some cases, a geometric algorithm defined in one domain is undefined in another. This happens with signed_turn_angle(). A signed angle is meaningful in two dimensions (the Terrestrial and Cartesian2D domains) but not in three dimensions (the Cartesian3D domain). Calls to signed_turn_angle() using 3D points will fail to compile.

Domains