/*
* Copyright 2003-2006, 2009, 2017, 2020 United States Government, as represented
* by the Administrator of the National Aeronautics and Space Administration.
* All rights reserved.
*
* The NASAWorldWind/WebWorldWind platform is licensed under the Apache License,
* Version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License
* at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
* NASAWorldWind/WebWorldWind also contains the following 3rd party Open Source
* software:
*
* ES6-Promise – under MIT License
* libtess.js – SGI Free Software License B
* Proj4 – under MIT License
* JSZip – under MIT License
*
* A complete listing of 3rd Party software notices and licenses included in
* WebWorldWind can be found in the WebWorldWind 3rd-party notices and licenses
* PDF found in code directory.
*/
define([
'./KmlElements',
'./KmlAbstractView',
'./util/KmlNodeTransformers'
], function (KmlElements,
KmlAbstractView,
NodeTransformers) {
"use strict";
/**
* Constructs an KmlCamera. Applications usually don't call this constructor. It is called by {@link KmlFile} as
* objects from Kml file are read. This object is already concrete implementation.
* @alias KmlCamera
* @classdesc Contains the data associated with Camera node.
* @param options {Object}
* @param options.objectNode {Node} Node representing camera in the document.
* @constructor
* @throws {ArgumentError} If the node is null or undefined.
* @see https://developers.google.com/kml/documentation/kmlreference#camera
* @augments KmlAbstractView
*/
var KmlCamera = function (options) {
KmlAbstractView.call(this, options);
};
KmlCamera.prototype = Object.create(KmlAbstractView.prototype);
Object.defineProperties(KmlCamera.prototype, {
/**
* Longitude of the virtual camera (eye point). Angular distance in degrees, relative to the Prime Meridian.
* Values west of the Meridian range from +-180 to 0 degrees. Values east of the Meridian range from 0
* to 180 degrees.
* @memberof KmlCamera.prototype
* @readonly
* @type {String}
*/
kmlLongitude: {
get: function () {
return this._factory.specific(this, {name: 'longitude', transformer: NodeTransformers.string});
}
},
/**
* Latitude of the virtual camera. Degrees north or south of the Equator (0 degrees). Values range from -90
* degrees to 90 degrees.
* @memberof KmlCamera.prototype
* @readonly
* @type {String}
*/
kmlLatitude: {
get: function () {
return this._factory.specific(this, {name: 'latitude', transformer: NodeTransformers.string});
}
},
/**
* Distance of the camera from the earth's surface, in meters. Interpreted according to the Camera's
* <altitudeMode> or <gx:altitudeMode>.
* @memberof KmlCamera.prototype
* @readonly
* @type {String}
*/
kmlAltitude: {
get: function () {
return this._factory.specific(this, {name: 'altitude', transformer: NodeTransformers.string});
}
},
/**
* Direction (azimuth) of the camera, in degrees. Default=0 (true North). (See diagram.) Values range from
* 0 to 360 degrees.
* @memberof KmlCamera.prototype
* @readonly
* @type {String}
*/
kmlHeading: {
get: function () {
return this._factory.specific(this, {name: 'heading', transformer: NodeTransformers.string});
}
},
/**
* Rotation, in degrees, of the camera around the X axis. A value of 0 indicates that the view is aimed
* straight down toward the earth (the most common case). A value for 90 for <tilt> indicates that the
* view
* is aimed toward the horizon. Values greater than 90 indicate that the view is pointed up into the sky.
* Values for <tilt> are clamped at +180 degrees.
* @memberof KmlCamera.prototype
* @readonly
* @type {String}
*/
kmlTilt: {
get: function () {
return this._factory.specific(this, {name: 'tilt', transformer: NodeTransformers.string});
}
},
/**
* Rotation, in degrees, of the camera around the Z axis. Values range from -180 to +180 degrees.
* @memberof KmlCamera.prototype
* @readonly
* @type {String}
*/
kmlRoll: {
get: function () {
return this._factory.specific(this, {name: 'roll', transformer: NodeTransformers.string});
}
},
/**
* Specifies how the <altitude> specified for the Camera is interpreted. Possible values are as
* follows:
* relativeToGround - (default) Interprets the <altitude> as a value in meters above the ground. If the
* point is over water, the <altitude> will be interpreted as a value in meters above sea level. See
* <gx:altitudeMode> below to specify points relative to the sea floor. clampToGround - For a camera, this
* setting also places the camera relativeToGround, since putting the camera exactly at terrain height
* would
* mean that the eye would intersect the terrain (and the view would be blocked). absolute - Interprets the
* <altitude> as a value in meters above sea level.
* @memberof KmlCamera.prototype
* @readonly
* @type {String}
*/
kmlAltitudeMode: {
get: function () {
return this._factory.specific(this, {name: 'altitudeMode', transformer: NodeTransformers.string});
}
}
});
/**
* @inheritDoc
*/
KmlCamera.prototype.getTagNames = function () {
return ['Camera'];
};
KmlElements.addKey(KmlCamera.prototype.getTagNames()[0], KmlCamera);
return KmlCamera;
});