findTileMetadata.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import defaultValue from "../Core/defaultValue.js";
  2. import defined from "../Core/defined.js";
  3. import hasExtension from "./hasExtension.js";
  4. import TileMetadata from "./TileMetadata.js";
  5. import oneTimeWarning from "../Core/oneTimeWarning.js";
  6. /**
  7. * Check if a tile has metadata, either defined in its metadata field (3D Tiles 1.1)
  8. * or in the <code>3DTILES_metadata</code> extension. If defined, get the tile metadata
  9. * with the corresponding class.
  10. * <p>
  11. * This assumes that tileset.metadata has been created before any tiles are constructed.
  12. * </p>
  13. * @function
  14. *
  15. * @param {Cesium3DTileset} tileset The tileset to query for tile metadata
  16. * @param {object} tileHeader the JSON header for a {@link Cesium3DTile}
  17. * @return {TileMetadata} the tile metadata, or <code>undefined</code> if not found
  18. * @private
  19. * @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.
  20. */
  21. function findTileMetadata(tileset, tileHeader) {
  22. const metadataJson = hasExtension(tileHeader, "3DTILES_metadata")
  23. ? tileHeader.extensions["3DTILES_metadata"]
  24. : tileHeader.metadata;
  25. if (!defined(metadataJson)) {
  26. return undefined;
  27. }
  28. if (!defined(tileset.schema)) {
  29. findTileMetadata._oneTimeWarning(
  30. "findTileMetadata-missing-root-schema",
  31. "Could not find a metadata schema for tile metadata. For tilesets that contain external tilesets, make sure the schema is added to the root tileset.json."
  32. );
  33. return undefined;
  34. }
  35. const classes = defaultValue(
  36. tileset.schema.classes,
  37. defaultValue.EMPTY_OBJECT
  38. );
  39. if (defined(metadataJson.class)) {
  40. const tileClass = classes[metadataJson.class];
  41. return new TileMetadata({
  42. tile: metadataJson,
  43. class: tileClass,
  44. });
  45. }
  46. return undefined;
  47. }
  48. // Exposed for testing
  49. findTileMetadata._oneTimeWarning = oneTimeWarning;
  50. export default findTileMetadata;