UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

133 lines 4.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RelativePosition = void 0; const tslib_1 = require("tslib"); const TimeService_1 = require("../../service/TimeService"); const utils_1 = require("../../utils"); const DataSerializer_1 = require("../DataSerializer"); const decorators_1 = require("../decorators"); const Accuracy_1 = require("../values/Accuracy"); const Accuracy1D_1 = require("../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.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_1.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 || utils_1.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_1.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_1.DataSerializer.clone(this); } }; exports.RelativePosition = RelativePosition; tslib_1.__decorate([ (0, decorators_1.SerializableMember)({ index: true, numberType: decorators_1.NumberType.LONG, }), tslib_1.__metadata("design:type", Number) ], RelativePosition.prototype, "timestamp", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)(), tslib_1.__metadata("design:type", String) ], RelativePosition.prototype, "referenceObjectUID", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)(), tslib_1.__metadata("design:type", String) ], RelativePosition.prototype, "referenceObjectType", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)(), tslib_1.__metadata("design:type", Object) ], RelativePosition.prototype, "referenceValue", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)({ name: 'accuracy', }), tslib_1.__metadata("design:type", Accuracy_1.Accuracy) ], RelativePosition.prototype, "_accuracy", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)({ name: 'probability', numberType: decorators_1.NumberType.DECIMAL, }), tslib_1.__metadata("design:type", Number) ], RelativePosition.prototype, "_probability", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)(() => utils_1.Unit), tslib_1.__metadata("design:type", Object) ], RelativePosition.prototype, "unit", void 0); exports.RelativePosition = RelativePosition = tslib_1.__decorate([ (0, decorators_1.SerializableObject)(), tslib_1.__metadata("design:paramtypes", [Object, Object, Object]) ], RelativePosition); //# sourceMappingURL=RelativePosition.js.map