"use strict";
/*global require*/
var CesiumMath = require("terriajs-cesium/Source/Core/Math").default;
var defaultValue = require("terriajs-cesium/Source/Core/defaultValue").default;
var defined = require("terriajs-cesium/Source/Core/defined").default;
var FunctionParameter = require("./FunctionParameter");
var inherit = require("../Core/inherit");
var Reproject = require("../Map/Reproject");
var Rectangle = require("terriajs-cesium/Source/Core/Rectangle").default;
var rectangleToPolygonArray = require("../Core/rectangleToPolygonArray");
/**
* A parameter that specifies a bounding box/extent on the globe.
*
* @alias RectangleParameter
* @constructor
* @extends FunctionParameter
*
* @param {Object} options Object with the following properties:
* @param {Terria} options.terria The Terria instance.
* @param {String} options.id The unique ID of this parameter.
* @param {String} [options.name] The name of this parameter. If not specified, the ID is used as the name.
* @param {String} [options.description] The description of the parameter.
* @param {Boolean} [options.defaultValue] The default value.
* @param {String} [options.crs] The Coordinate Reference System to use.
*/
var RectangleParameter = function(options) {
FunctionParameter.call(this, options);
this.crs = defaultValue(options.crs, Reproject.TERRIA_CRS);
};
inherit(FunctionParameter, RectangleParameter);
Object.defineProperties(RectangleParameter.prototype, {
/**
* Gets the type of this parameter.
* @memberof DateTimeParameter.prototype
* @type {String}
*/
type: {
get: function() {
return "rectangle";
}
}
/**
* Gets or sets the value of this parameter.
* @memberof RectangleParameter.prototype
* @member {Rectangle} value
*/
});
RectangleParameter.prototype.formatValueAsString = function(value) {
value = defaultValue(value, this.value);
if (!defined(value)) {
return "-";
}
var sw = Rectangle.southwest(value);
var ne = Rectangle.northeast(value);
var swlon = CesiumMath.toDegrees(sw.longitude),
swlat = CesiumMath.toDegrees(sw.latitude),
nelon = CesiumMath.toDegrees(ne.longitude),
nelat = CesiumMath.toDegrees(ne.latitude);
return (
Math.abs(swlat).toFixed(2) +
"°" +
(swlat < 0 ? "S " : "N ") +
Math.abs(swlon).toFixed(2) +
"°" +
(swlon < 0 ? "W" : "E") +
" to " +
Math.abs(nelat).toFixed(2) +
"°" +
(nelat < 0 ? "S " : "N ") +
Math.abs(nelon).toFixed(2) +
"°" +
(nelon < 0 ? "W" : "E")
);
};
RectangleParameter.prototype.getGeoJsonFeature = function(value) {
value = defaultValue(value, this.value);
return {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: rectangleToPolygonArray(value)
}
};
};
RectangleParameter.formatValueAsString =
RectangleParameter.prototype.formatValueAsString;
RectangleParameter.getGeoJsonFeature =
RectangleParameter.prototype.getGeoJsonFeature;
module.exports = RectangleParameter;