import Color from "../Core/Color.js"; import defaultValue from "../Core/defaultValue.js"; import defined from "../Core/defined.js"; import Cesium3DTileset from "./Cesium3DTileset.js"; import Cesium3DTileStyle from "./Cesium3DTileStyle.js"; /** * Creates a {@link Cesium3DTileset} instance for the * {@link https://cesium.com/content/cesium-osm-buildings/|Cesium OSM Buildings} * tileset. * * @function * * @param {object} [options] Construction options. Any options allowed by the {@link Cesium3DTileset} constructor * may be specified here. In addition to those, the following properties are supported: * @param {Color} [options.defaultColor=Color.WHITE] The default color to use for buildings * that do not have a color. This parameter is ignored if options.style is specified. * @param {Cesium3DTileStyle} [options.style] The style to use with the tileset. If not * specified, a default style is used which gives each building or building part a * color inferred from its OpenStreetMap tags. If no color can be inferred, * options.defaultColor is used. * @param {boolean} [options.enableShowOutline=true] If true, enable rendering outlines. This can be set to false to avoid the additional processing of geometry at load time. * @param {boolean} [options.showOutline=true] Whether to show outlines around buildings. When true, * outlines are displayed. When false, outlines are not displayed. * @returns {Promise} * * @see Ion * * @example * // Create Cesium OSM Buildings with default styling * const viewer = new Cesium.Viewer("cesiumContainer"); * try { * const tileset = await Cesium.createOsmBuildingsAsync(); * viewer.scene.primitives.add(tileset)); * } catch (error) { * console.log(`Error creating tileset: ${error}`); * } * * @example * // Create Cesium OSM Buildings with a custom style highlighting * // schools and hospitals. * const viewer = new Cesium.Viewer("cesiumContainer"); * try { * const tileset = await Cesium.createOsmBuildingsAsync({ * style: new Cesium.Cesium3DTileStyle({ * color: { * conditions: [ * ["${feature['building']} === 'hospital'", "color('#0000FF')"], * ["${feature['building']} === 'school'", "color('#00FF00')"], * [true, "color('#ffffff')"] * ] * } * }) * }); * viewer.scene.primitives.add(tileset)); * } catch (error) { * console.log(`Error creating tileset: ${error}`); * } */ async function createOsmBuildingsAsync(options) { const tileset = await Cesium3DTileset.fromIonAssetId(96188, options); options = defaultValue(options, defaultValue.EMPTY_OBJECT); let style = options.style; if (!defined(style)) { const color = defaultValue( options.defaultColor, Color.WHITE ).toCssColorString(); style = new Cesium3DTileStyle({ color: `Boolean(\${feature['cesium#color']}) ? color(\${feature['cesium#color']}) : ${color}`, }); } tileset.style = style; return tileset; } export default createOsmBuildingsAsync;