_addFile()

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};
  }