@openhps/core
Version:
Open Hybrid Positioning System - Core component
133 lines • 4.62 kB
JavaScript
;
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