UNPKG

terriajs

Version:

Geospatial data visualization platform.

181 lines (154 loc) 5.6 kB
'use strict'; /*global require*/ var CatalogItem = require('./CatalogItem'); var Cesium3DTileset = require('terriajs-cesium/Source/Scene/Cesium3DTileset'); var combine = require('terriajs-cesium/Source/Core/combine'); var defined = require('terriajs-cesium/Source/Core/defined'); var defineProperties = require('terriajs-cesium/Source/Core/defineProperties'); var inherit = require('../Core/inherit'); var IonResource = require('terriajs-cesium/Source/Core/IonResource'); var proxyCatalogItemUrl = require('./proxyCatalogItemUrl'); var raiseErrorToUser = require('./raiseErrorToUser'); var TerriaError = require('../Core/TerriaError'); /** * A {@link CatalogItem} that is added to the map as Cesium 3D Tiles. * * @alias Cesium3DTilesCatalogItem * @constructor * @extends CatalogItem * @abstract * * @param {Terria} terria The Terria instance. */ var Cesium3DTilesCatalogItem = function(terria) { CatalogItem.call(this, terria); /** * Gets or sets additional options to pass to Cesium's Cesium3DTileset constructor. * @type {Object} */ this.options = undefined; /** * Gets or sets the ID of the Cesium Ion asset to access. If this property is set, the {@link Cesium3DTilesCatalogItem#url} * property is ignored. * @type {Number} */ this.ionAssetId = undefined; /** * Gets or sets the Cesium Ion access token to use to access the tileset. If not specified, the token specified * using the `cesiumIonAccessToken` property in `config.json` is used. This property is ignored if * {@link Cesium3DTilesCatalogItem#ionAssetId} is not set. * @type {String} */ this.ionAccessToken = undefined; /** * Gets or sets the Cesium Ion access token to use to access the tileset. If not specified, the default Ion * server, `https://api.cesium.com/`, is used. This property is ignored if * {@link Cesium3DTilesCatalogItem#ionAssetId} is not set. * @type {String} */ this.ionServer = undefined; this._tileset = undefined; }; inherit(CatalogItem, Cesium3DTilesCatalogItem); defineProperties(Cesium3DTilesCatalogItem.prototype, { /** * Gets the type of data item represented by this instance. * @memberOf CesiumTerrainCatalogItem.prototype * @type {String} */ type : { get : function() { return '3d-tiles'; } }, /** * Gets a human-readable name for this type of data source, 'Cesium 3D Tiles'. * @memberOf CesiumTerrainCatalogItem.prototype * @type {String} */ typeName : { get : function() { return 'Cesium 3D Tiles'; } }, /** * Gets a value indicating whether this data source, when enabled, can be reordered with respect to other data sources. * Data sources that cannot be reordered are typically displayed above reorderable data sources. * @memberOf Cesium3DTilesCatalogItem.prototype * @type {Boolean} */ supportsReordering : { get : function() { return false; } }, /** * Gets a value indicating whether the opacity of this data source can be changed. * @memberOf Cesium3DTilesCatalogItem.prototype * @type {Boolean} */ supportsOpacity : { get : function() { return false; } } }); Cesium3DTilesCatalogItem.prototype._showInCesium = function() { if (defined(this._tileset)) { this._tileset.show = true; } }; Cesium3DTilesCatalogItem.prototype._hideInCesium = function() { if (defined(this._tileset)) { this._tileset.show = false; } }; Cesium3DTilesCatalogItem.prototype._showInLeaflet = function() { this.isShown = false; throw new TerriaError({ sender: this, title: 'Not supported in 2D', message: '"' + this.name + '" cannot be show in the 2D view. Switch to 3D and try again.' }); }; Cesium3DTilesCatalogItem.prototype._hideInLeaflet = function() { // Nothing to be done. }; Cesium3DTilesCatalogItem.prototype._enableInCesium = function() { if (!defined(this._tileset)) { let resource = proxyCatalogItemUrl(this, this.url); if (defined(this.ionAssetId)) { resource = IonResource.fromAssetId(this.ionAssetId, { accessToken: this.ionAccessToken || this.terria.configParameters.cesiumIonAccessToken, server: this.ionServer }).otherwise(e => { raiseErrorToUser(this.terria, e); }); } let options = { show: this.isShown, url: resource }; if (this.options) { options = combine(options, this.options); } this._tileset = new Cesium3DTileset(options); } const primitives = this.terria.cesium.scene.primitives; if (!primitives.contains(this._tileset)) { primitives.add(this._tileset); } }; Cesium3DTilesCatalogItem.prototype._disableInCesium = function() { if (defined(this._tileset)) { this.terria.cesium.scene.primitives.removeAndDestroy(this._tileset); this._tileset = undefined; } }; Cesium3DTilesCatalogItem.prototype._enableInLeaflet = function() { // Nothing to be done. }; Cesium3DTilesCatalogItem.prototype._disableInLeaflet = function() { // Nothing to be done. }; module.exports = Cesium3DTilesCatalogItem;