terriajs
Version:
Geospatial data visualization platform.
282 lines (249 loc) • 7.41 kB
text/typescript
import objectTrait from "../Decorators/objectTrait";
import primitiveTrait from "../Decorators/primitiveTrait";
import mixTraits from "../mixTraits";
import ModelTraits from "../ModelTraits";
import AttributionTraits from "./AttributionTraits";
import { FeatureInfoTemplateTraits } from "./FeatureInfoTraits";
export class RectangleTraits extends ModelTraits {
@primitiveTrait({
type: "number",
name: "West",
description: "The westernmost longitude in degrees."
})
west?: number;
@primitiveTrait({
type: "number",
name: "South",
description: "The southernmost longitude in degrees."
})
south?: number;
@primitiveTrait({
type: "number",
name: "East",
description: "The easternmost longitude in degrees."
})
east?: number;
@primitiveTrait({
type: "number",
name: "North",
description: "The northernmost longitude in degrees."
})
north?: number;
}
export class LookAtTraits extends ModelTraits {
@primitiveTrait({
type: "number",
name: "Target longitude",
description: "Target longitude on the WGS84 ellipsoid in degrees"
})
targetLongitude?: number;
@primitiveTrait({
type: "number",
name: "Target latitude",
description: "Target latitude on the WGS84 ellipsoid in degrees"
})
targetLatitude?: number;
@primitiveTrait({
type: "number",
name: "Target height",
description:
"Target height in meters. Treat it as camera height. A positive value is above the WGS84 ellipsoid. Default to 100 meters."
})
targetHeight?: number = 100;
@primitiveTrait({
type: "number",
name: "Heading",
description:
"Heading in degrees. Treat it as camera bearing. North is 0. A positive value rotates clockwise, negative anti-clockwise. Default to 0."
})
heading?: number = 0;
@primitiveTrait({
type: "number",
name: "Pitch",
description:
"Pitch in degrees. Treat it as camera pitch. A positive value is to look down, negative up. Default to 45."
})
pitch?: number = 45;
@primitiveTrait({
type: "number",
name: "Range",
description:
"The range in meters. It is the distance between the target position and camera position projected onto the local plane. Not negative and default to 500."
})
range?: number = 500;
}
export class VectorTraits extends ModelTraits {
@primitiveTrait({
type: "number",
name: "x",
description: "X component of vector in the Earth-centered Fixed frame."
})
x?: number;
@primitiveTrait({
type: "number",
name: "y",
description: "Y component of vector in the Earth-centered Fixed frame."
})
y?: number;
@primitiveTrait({
type: "number",
name: "z",
description: "Z component of vector in the Earth-centered Fixed frame."
})
z?: number;
}
export class CameraTraits extends RectangleTraits {
@objectTrait({
type: VectorTraits,
name: "position",
description:
"Position of the camera in the Earth-centered Fixed frame in meters."
})
position?: VectorTraits;
@objectTrait({
type: VectorTraits,
name: "direction",
description:
"The look direction of the camera in the Earth-centered Fixed frame."
})
direction?: VectorTraits;
@objectTrait({
type: VectorTraits,
name: "up",
description:
"The up vector direction of the camera in the Earth-centered Fixed frame."
})
up?: VectorTraits;
}
export class IdealZoomTraits extends ModelTraits {
@objectTrait({
type: LookAtTraits,
name: "Look at",
description: "Parameters for camera to look at a target."
})
lookAt?: LookAtTraits;
@objectTrait({
type: CameraTraits,
name: "Camera",
description:
"Use camera position, direction and up if fully defined. Otherwise use rectangle if fully defined."
})
camera?: CameraTraits;
}
export class InitialMessageTraits extends ModelTraits {
@primitiveTrait({
type: "string",
name: "Title",
description: "The title of the message."
})
title?: string;
@primitiveTrait({
type: "string",
name: "Content",
description: "The content of the message."
})
content?: string;
@primitiveTrait({
type: "string",
name: "Key",
description:
"Identifier. If multiple messages with the same key are triggered, only the first will be displayed."
})
key?: string;
@primitiveTrait({
type: "boolean",
name: "Confirmation",
description: "Whether the message requires confirmation."
})
confirmation?: boolean;
@primitiveTrait({
type: "string",
name: "Name",
description:
"If `confirmation` is true, the text to put on the confirmation button."
})
confirmText?: string;
@primitiveTrait({
type: "number",
name: "Width",
description: "Width of the message."
})
width?: number;
@primitiveTrait({
type: "number",
name: "height",
description: "Height of the message."
})
height?: number;
}
export default class MappableTraits extends mixTraits(AttributionTraits) {
@objectTrait({
type: RectangleTraits,
name: "Rectangle",
description:
"The bounding box rectangle that contains all the data in this catalog item."
})
rectangle?: RectangleTraits;
@objectTrait({
type: IdealZoomTraits,
name: "Ideal zoom",
description: "Override default ideal zoom if the given values are valid."
})
idealZoom?: IdealZoomTraits;
@primitiveTrait({
type: "boolean",
name: "Disable Preview",
description:
"Disables the preview on the Add Data panel. This is useful when the preview will be very slow to load."
})
disablePreview: boolean = false;
@primitiveTrait({
type: "boolean",
name: "Disable zoom to",
description:
"Disables the zoom to (aka 'Ideal Zoom') button in the workbench."
})
disableZoomTo: boolean = false;
@primitiveTrait({
type: "boolean",
name: "Zoom on enable",
description:
"Zoom to dataset when added to workbench. Doesn't work if `disableZoomTo` is true."
})
zoomOnAddToWorkbench: boolean = false;
@primitiveTrait({
type: "boolean",
name: "Show",
description:
"Show or hide a workbench item. When show is false, a mappable item is removed from the map and a chartable item is removed from the chart panel."
})
show: boolean = true;
@objectTrait({
name: "Initial message",
type: InitialMessageTraits,
description:
"A message to show when the user adds the catalog item to the workbench. Useful for showing disclaimers."
})
initialMessage?: InitialMessageTraits;
@objectTrait({
type: FeatureInfoTemplateTraits,
name: "Feature info template",
description:
"A template object for formatting content in feature info panel"
})
featureInfoTemplate?: FeatureInfoTemplateTraits;
@primitiveTrait({
type: "string",
name: "Show string if (feature info) property value is null",
description:
"If the value of a property is null or undefined, show the specified string as the value of the property. Otherwise, the property name will not be listed at all."
})
showStringIfPropertyValueIsNull?: string;
@primitiveTrait({
type: "number",
name: "Maximum shown feature infos",
description:
'The maximum number of "feature infos" that can be displayed in feature info panel.'
})
maximumShownFeatureInfos?: number;
}