import { Int32FlatVector } from "./flat/int32FlatVector"; import { DoubleFlatVector } from "./flat/doubleFlatVector"; import { Int32SequenceVector } from "./sequence/int32SequenceVector"; import { Int32ConstVector } from "./constant/int32ConstVector"; export default class FeatureTable { constructor(_name, _geometryVector, _idVector, _propertyVectors, _extent = 4096) { this._name = _name; this._geometryVector = _geometryVector; this._idVector = _idVector; this._propertyVectors = _propertyVectors; this._extent = _extent; } get name() { return this._name; } get idVector() { return this._idVector; } get geometryVector() { return this._geometryVector; } get propertyVectors() { return this._propertyVectors; } getPropertyVector(name) { if (!this.propertyVectorsMap) { this.propertyVectorsMap = new Map(this._propertyVectors.map((vector) => [vector.name, vector])); } return this.propertyVectorsMap.get(name); } get numFeatures() { return this.geometryVector.numGeometries; } get extent() { return this._extent; } /** * Returns all features as an array */ getFeatures() { const features = []; const geometries = this.geometryVector.getGeometries(); for (let i = 0; i < this.numFeatures; i++) { let id; if (this.idVector) { const idValue = this.idVector.getValue(i); id = this.containsMaxSafeIntegerValues(this.idVector) && idValue !== null ? Number(idValue) : idValue; } const geometry = { coordinates: geometries[i], type: this.geometryVector.geometryType(i), }; const properties = {}; for (const propertyColumn of this.propertyVectors) { if (!propertyColumn) continue; const columnName = propertyColumn.name; const propertyValue = propertyColumn.getValue(i); if (propertyValue !== null) { properties[columnName] = propertyValue; } } features.push({ id, geometry, properties }); } return features; } containsMaxSafeIntegerValues(idVector) { return (idVector instanceof Int32FlatVector || idVector instanceof Int32ConstVector || idVector instanceof Int32SequenceVector || idVector instanceof DoubleFlatVector); } } //# sourceMappingURL=featureTable.js.map