UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

103 lines 3.67 kB
import { __decorate, __metadata } from "tslib"; import { TimeService } from '../../service/TimeService'; import { Unit } from '../../utils'; import { DataSerializer } from '../DataSerializer'; import { SerializableMember, SerializableObject, NumberType } from '../decorators'; import { Accuracy } from '../values/Accuracy'; import { Accuracy1D } from '../values/Accuracy1D'; /** * Relative position to another reference object or space. * @category Position */ let RelativePosition = class RelativePosition { /** * Get the position probability * @returns {number} Probability between 0 and 1 */ get probability() { if (!this._probability) { return 1 / this.accuracy.valueOf(); } return this._probability; } set probability(value) { if (value > 1 || value < 0) { throw new Error(`${this.constructor.name} should be between 0 and 1.`); } this._probability = value; } /** * Position accuracy * @returns {Accuracy} Position accuracy */ get accuracy() { if (!this._accuracy) { this._accuracy = new Accuracy1D(1, this._defaultUnit); } return this._accuracy; } set accuracy(value) { if (!value) { throw new Error(`Accuracy can not be undefined!`); } this._accuracy = value; } constructor(referenceObject, value, unit) { /** * Position recording timestamp */ this.timestamp = TimeService.now(); if (referenceObject !== undefined) { if (referenceObject instanceof String || typeof referenceObject === 'string') { this.referenceObjectUID = referenceObject; } else { this.referenceObjectType = referenceObject.constructor.name; this.referenceObjectUID = referenceObject.uid; } } this._defaultUnit = unit || Unit.UNKNOWN; this.unit = unit; this.referenceValue = value; } /** * Set the accuracy of the absolute position * @param {number | Accuracy} accuracy Accuracy object or number * @param {Unit} [unit] Optional unit * @returns {RelativePosition} instance */ setAccuracy(accuracy, unit) { if (typeof accuracy === 'number') { this.accuracy = new Accuracy1D(accuracy, unit || this._defaultUnit); } else { this.accuracy = accuracy; } return this; } equals(position) { return this.timestamp === position.timestamp; } /** * Clone the position * @returns {RelativePosition} Cloned relative position */ clone() { return DataSerializer.clone(this); } }; __decorate([SerializableMember({ index: true, numberType: NumberType.LONG }), __metadata("design:type", Number)], RelativePosition.prototype, "timestamp", void 0); __decorate([SerializableMember(), __metadata("design:type", String)], RelativePosition.prototype, "referenceObjectUID", void 0); __decorate([SerializableMember(), __metadata("design:type", String)], RelativePosition.prototype, "referenceObjectType", void 0); __decorate([SerializableMember(), __metadata("design:type", Object)], RelativePosition.prototype, "referenceValue", void 0); __decorate([SerializableMember({ name: 'accuracy' }), __metadata("design:type", Accuracy)], RelativePosition.prototype, "_accuracy", void 0); __decorate([SerializableMember({ name: 'probability', numberType: NumberType.DECIMAL }), __metadata("design:type", Number)], RelativePosition.prototype, "_probability", void 0); __decorate([SerializableMember(() => Unit), __metadata("design:type", Object)], RelativePosition.prototype, "unit", void 0); RelativePosition = __decorate([SerializableObject(), __metadata("design:paramtypes", [Object, Object, Object])], RelativePosition); export { RelativePosition };