findTileMetadata.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import defined from "../Core/defined.js";
  2. import hasExtension from "./hasExtension.js";
  3. import TileMetadata from "./TileMetadata.js";
  4. /**
  5. * Check if a tile has metadata, either defined in its metadata field (3D Tiles 1.1)
  6. * or in the <code>3DTILES_metadata</code> extension. If defined, get the tile metadata
  7. * with the corresponding class.
  8. * <p>
  9. * This assumes that tileset.metadata has been created before any tiles are constructed.
  10. * </p>
  11. * @function
  12. *
  13. * @param {Cesium3DTileset} tileset The tileset to query for tile metadata
  14. * @param {Object} tileHeader the JSON header for a {@link Cesium3DTile}
  15. * @return {TileMetadata} the tile metadata, or <code>undefined</code> if not found
  16. * @private
  17. * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.
  18. */
  19. export default function findTileMetadata(tileset, tileHeader) {
  20. const metadataJson = hasExtension(tileHeader, "3DTILES_metadata")
  21. ? tileHeader.extensions["3DTILES_metadata"]
  22. : tileHeader.metadata;
  23. if (!defined(metadataJson)) {
  24. return undefined;
  25. }
  26. const classes = tileset.schema.classes;
  27. if (defined(metadataJson.class)) {
  28. const tileClass = classes[metadataJson.class];
  29. return new TileMetadata({
  30. tile: metadataJson,
  31. class: tileClass,
  32. });
  33. }
  34. return undefined;
  35. }