in viewer/src/provider/OpensfmDataProvider.js [168:236]
_addFile(file) {
const cells = {};
const clusters = {};
const meshes = {};
const images = {};
const sequences = {};
const rawData = {};
let clusterIndex = Object.keys(this._data.clusters).length;
for (const cluster of file.data) {
const clusterId = this._inventClusterId(clusterIndex++);
rawData[clusterId] = {
cluster,
id: clusterId,
file: {
url: file.url,
children: file.children,
name: file.name,
},
};
const reference = this._convert.reference(cluster.reference_lla);
clusters[clusterId] = this._convert.cluster(
cluster,
clusterId,
reference,
);
const shots = cluster.shots;
const cameras = cluster.cameras;
for (const shotId in shots) {
if (!shots.hasOwnProperty(shotId)) {
continue;
}
const shot = shots[shotId];
const camera = cameras[shot.camera];
const image = this._convert.image(
shotId,
clusterId,
shot,
camera,
reference,
);
const uniqueId = image.id;
if (this._hasImage(uniqueId)) {
throw new Error(`Image ${uniqueId} already exists`);
}
images[uniqueId] = image;
const sequenceId = uniqueId;
if (!(sequenceId in sequences)) {
sequences[sequenceId] = this._convert.sequence(sequenceId);
}
meshes[uniqueId] = this._convert.mesh(shot);
const cellId = this._geometry.lngLatToCellId(image.geometry);
if (!(cellId in cells)) {
cells[cellId] = {};
}
cells[cellId][uniqueId] = image;
}
}
const data = {cells, clusters, images, meshes, sequences};
this._appendData(data);
Object.assign(this._rawData, rawData);
return {data, rawData};
}