earthtrek-core
Version:
Global Nominee NASA Space Apps Challenge 2017 Buenos Aires - Global Finalist (Best Use of Data) NASA Space Apps Challenge 2017 - 1D, 2D, 3D, Go! Challenge
244 lines (204 loc) • 11 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
* @class EarthTrekLayerCollection
* @module EarthTrek
* @author SATrek
* @author Alejandro Sanchez <alejandro.sanchez.trek@gmail.com>
* @description EarthTrekCore - 08 JUL 2017.
*/
var _earthtrekProvider = require('./earthtrek-provider');
var _earthtrekProvider2 = _interopRequireDefault(_earthtrekProvider);
var _cesium = require('./utils/cesium');
var _earthtrekCore = require('./earthtrek-core');
require('babel-polyfill');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var EarthTrekLayerCollection = function () {
/**
*
*/
function EarthTrekLayerCollection() {
_classCallCheck(this, EarthTrekLayerCollection);
this.layers = [];
}
/**
* Add Layer
* @param layer
* @returns ImageryLayer
*/
_createClass(EarthTrekLayerCollection, [{
key: 'add',
value: function add(layer) {
var _this = this;
if (layer.format == undefined) {
throw new Error('Format undefined');
}
if (layer.hide == undefined) {
layer.hide = true;
}
if (layer.format == 'image/jpeg' && layer.hide == true) {
this.hideFormatLayer('image/jpeg');
}
if (layer.maximumLevel == undefined) {
layer.maximumLevel = layer.format == 'image/png' ? 2 : 8;
}
if (layer.removable == undefined) {
layer.removable = true;
}
if (layer.top == undefined) {
layer.top = false;
}
layer.tileMatrixSetID = "epsg4326";
var newLayerProvider = _earthtrekProvider2.default.getProvider(layer);
var addedLayer = this.getImageryLayers().addImageryProvider(newLayerProvider);
if (this.getImageryLayers()._layers[0].format == 'image/jpeg') {
this.getImageryLayers()._layers[0].show = false;
// that.viewer.scene.imageryLayers.lowerToBottom(that.viewer.scene.imageryLayers._layers[0].show = false);
}
layer.imagery = addedLayer;
layer.index = this.layers.length;
this.layers.push(layer);
this.layers.forEach(function (earthTrekLayer) {
_this.raiseToTop(earthTrekLayer);
});
return layer;
}
}, {
key: Symbol.iterator,
value: function value() {
var index = -1;
var data = this.layers;
return {
next: function next() {
return { value: data[++index], done: !(index in data) };
}
};
}
}, {
key: 'length',
value: function length() {
return this.layers.length;
}
}, {
key: 'getInstance',
value: function getInstance() {
return (0, _earthtrekCore.earthTrekInstance)();
}
/**
* Get Imagery Layers
* @returns {imageryLayers|{get}|*|ImageryLayerCollection}
*/
}, {
key: 'getImageryLayers',
value: function getImageryLayers() {
return this.getInstance().getViewer().scene.imageryLayers;
}
/**
*
* @param format
*/
}, {
key: 'hideFormatLayer',
value: function hideFormatLayer(format) {
var _this2 = this;
return this.iterate({}, function (imageryLayer) {
if (imageryLayer.imageryProvider.format == format) {
imageryLayer.show = false;
_this2.getInstance().raise('layer-hidden', { 'imageryLayer': imageryLayer });
return true;
}
});
}
/**
* Remove Layer
* @param object layer
* @returns {boolean}
*/
}, {
key: 'iterate',
value: function iterate(layer, callback) {
var imageryLayers = this.getImageryLayers();
if (layer instanceof _cesium.ImageryLayer) {
if (callback(layer) == true) {
return true;
}
}
for (var i = 0; i <= imageryLayers.length - 1; i++) {
var imageryLayer = imageryLayers.get(i);
if (callback(imageryLayer) == true) {
return true;
}
}
return false;
}
/**
* Hide Layer
* @returns {boolean}
*/
}, {
key: 'hide',
value: function hide(layer) {
var _this3 = this;
return this.iterate(layer, function (imageryLayer) {
if (imageryLayer.imageryProvider._layer == layer.id) {
imageryLayer.show = false;
_this3.getInstance().raise('layer-hidden', { 'imageryLayer': imageryLayer });
return true;
}
});
}
/**
* Hide Layer
* @returns {boolean}
*/
}, {
key: 'remove',
value: function remove(layer) {
var _this4 = this;
return this.iterate(layer, function (imageryLayer) {
if (imageryLayer.imageryProvider._layer == layer.id && layer.removable != false) {
_this4.layers.splice(layer.index, 1);
_this4.getInstance().raise('layer-removed', { 'imageryLayer': imageryLayer });
return _this4.getImageryLayers().remove(imageryLayer);
}
});
}
/**
* Toggle Layer visibility
* @param layer
* @param callback
*/
}, {
key: 'toggle',
value: function toggle(layer, callback) {
return this.iterate(layer, function (imageryLayer) {
if (imageryLayer.imageryProvider._layer == layer.id) {
imageryLayer.show = !imageryLayer.show;
if (callback == undefined) {
return imageryLayer.show;
}
return callback(imageryLayer.show);
}
});
}
/**
*
* @param layer
* @returns {boolean}
*/
}, {
key: 'raiseToTop',
value: function raiseToTop(layer) {
if (layer.top == true && this.getImageryLayers().contains(layer.imagery)) {
this.getImageryLayers().raiseToTop(layer.imagery);
return true;
}
return false;
}
}]);
return EarthTrekLayerCollection;
}();
exports.default = EarthTrekLayerCollection;