terriajs
Version:
Geospatial data visualization platform.
136 lines • 6.08 kB
JavaScript
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