UNPKG

terriajs

Version:

Geospatial data visualization platform.

136 lines 6.08 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import i18next from "i18next"; import { computed, makeObservable, observable, override, runInAction, toJS } from "mobx"; import ArcGISTiledElevationTerrainProvider from "terriajs-cesium/Source/Core/ArcGISTiledElevationTerrainProvider"; import BoundingSphere from "terriajs-cesium/Source/Core/BoundingSphere"; import Cartesian2 from "terriajs-cesium/Source/Core/Cartesian2"; import Resource from "terriajs-cesium/Source/Core/Resource"; import Cesium3DTileColorBlendMode from "terriajs-cesium/Source/Scene/Cesium3DTileColorBlendMode"; import I3SDataProvider from "terriajs-cesium/Source/Scene/I3SDataProvider"; import isDefined from "../../../Core/isDefined"; import CatalogMemberMixin, { getName } from "../../../ModelMixins/CatalogMemberMixin"; import Cesium3dTilesStyleMixin from "../../../ModelMixins/Cesium3dTilesStyleMixin"; import FeatureInfoUrlTemplateMixin from "../../../ModelMixins/FeatureInfoUrlTemplateMixin"; import MappableMixin from "../../../ModelMixins/MappableMixin"; import ShadowMixin from "../../../ModelMixins/ShadowMixin"; import UrlMixin from "../../../ModelMixins/UrlMixin"; import I3SCatalogItemTraits from "../../../Traits/TraitsClasses/I3SCatalogItemTraits"; import CreateModel from "../../Definition/CreateModel"; import TerriaFeature from "../../Feature/Feature"; export default class I3SCatalogItem extends Cesium3dTilesStyleMixin(FeatureInfoUrlTemplateMixin(ShadowMixin(MappableMixin(UrlMixin(CatalogMemberMixin(CreateModel(I3SCatalogItemTraits))))))) { static type = "i3s"; type = I3SCatalogItem.type; dataProvider; constructor(...args) { super(...args); makeObservable(this); } get boundingSphere() { if (this.dataProvider?.layers) { return BoundingSphere.fromBoundingSpheres(this.dataProvider.layers .map((layer) => layer.tileset?.boundingSphere) .filter(isDefined)); } } async forceLoadMapItems() { if (!isDefined(this.url)) { throw `\`url\` is not defined for ${getName(this)}`; } const resource = new Resource(this.url); if (this.token) { resource.appendQueryParameters({ token: this.token }); } const i3sProvider = await I3SDataProvider.fromUrl(resource, { showFeatures: this.allowFeaturePicking, geoidTiledTerrainProvider: this.terrainURL ? await ArcGISTiledElevationTerrainProvider.fromUrl(this.terrainURL) : undefined }); runInAction(() => { this.dataProvider = i3sProvider; }); } /** * This function should return null if allowFeaturePicking = false * @param _screenPosition * @param pickResult */ buildFeatureFromPickResult(_screenPosition, pickResult) { if (this.allowFeaturePicking && isDefined(pickResult.content) && isDefined(pickResult.content.tile.i3sNode) && isDefined(pickResult.featureId) && _screenPosition) { const i3sNode = pickResult.content.tile.i3sNode; return i3sNode.loadFields().then(() => { const fields = i3sNode.getFieldsForFeature(pickResult.featureId); const result = new TerriaFeature({ properties: fields }); result._cesium3DTileFeature = pickResult; return result; }); } return undefined; } get mapItems() { if (this.isLoadingMapItems || !isDefined(this.dataProvider)) { return []; } if (this.dataProvider.isDestroyed()) { this.forceLoadMapItems(); } if (this.dataProvider) { this.dataProvider.show = this.show; this.dataProvider.layers.forEach((layer) => { const tileset = layer.tileset; if (tileset) { tileset.style = toJS(this.cesiumTileStyle); tileset.shadows = this.cesiumShadows; // @ts-expect-error - Attach terria catalog item to tileset tileset._catalogItem = this; if (this.lightingFactor && tileset.imageBasedLighting) { tileset.imageBasedLighting.imageBasedLightingFactor = new Cartesian2(...this.lightingFactor); } const key = this .colorBlendMode; const colorBlendMode = Cesium3DTileColorBlendMode[key]; if (colorBlendMode !== undefined) tileset.colorBlendMode = colorBlendMode; tileset.colorBlendAmount = this.colorBlendAmount; } }); } return [this.dataProvider]; } get shortReport() { if (this.terria.currentViewer.type === "Leaflet") { return i18next.t("models.commonModelErrors.3dTypeIn2dMode", this); } return super.shortReport; } get typeName() { return i18next.t("core.dataType.i3s"); } } __decorate([ observable ], I3SCatalogItem.prototype, "dataProvider", void 0); __decorate([ computed ], I3SCatalogItem.prototype, "boundingSphere", null); __decorate([ computed ], I3SCatalogItem.prototype, "mapItems", null); __decorate([ override ], I3SCatalogItem.prototype, "shortReport", null); //# sourceMappingURL=I3SCatalogItem.js.map