108 lines
2.9 KiB
JavaScript
Executable File
108 lines
2.9 KiB
JavaScript
Executable File
var _ = require('underscore');
|
|
var Backbone = require('backbone');
|
|
var moment = require('moment');
|
|
var NASAView = require('./nasa-view');
|
|
var CustomBaselayerModel = require('builder/data/custom-baselayer-model');
|
|
|
|
var TYPES = {
|
|
day: {
|
|
url: 'http://map1.vis.earthdata.nasa.gov/wmts-webmerc/MODIS_Terra_CorrectedReflectance_TrueColor/default/<%- date %>/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpeg',
|
|
limit: '2012-05-01',
|
|
default: '2012-05-01',
|
|
attribution: '<a href="http://earthdata.nasa.gov/gibs" target="_blank">NASA EOSDIS GIBS</a>',
|
|
name: 'NASA Terra',
|
|
maxZoom: 9,
|
|
minZoom: 1
|
|
},
|
|
night: {
|
|
url: 'http://map1.vis.earthdata.nasa.gov/wmts-webmerc/VIIRS_CityLights_2012/default/<%- date %>/GoogleMapsCompatible_Level8/{z}/{y}/{x}.jpeg',
|
|
limit: '2012-05-01',
|
|
default: '2012-05-02',
|
|
attribution: '<a href="http://earthdata.nasa.gov/gibs" target="_blank">NASA EOSDIS GIBS</a>',
|
|
name: 'NASA Earth at night',
|
|
maxZoom: 8,
|
|
minZoom: 1
|
|
}
|
|
};
|
|
|
|
/**
|
|
* View model for NASA tab content.
|
|
*/
|
|
|
|
module.exports = Backbone.Model.extend({
|
|
|
|
defaults: {
|
|
name: 'nasa',
|
|
label: 'NASA',
|
|
layer: undefined, // gets set on dayOrNight/date changes
|
|
layerType: 'day',
|
|
date: undefined, // for date picker
|
|
current: undefined,
|
|
format: 'Y-m-d' // YYYY-MM-DD
|
|
},
|
|
|
|
initialize: function () {
|
|
this._initBinds();
|
|
},
|
|
|
|
createView: function (opts) {
|
|
if (!opts.submitButton) throw new Error('submitButton is required');
|
|
|
|
this._submitButton = opts.submitButton;
|
|
|
|
var utc = new Date().getTimezoneOffset();
|
|
var today = moment(new Date()).utcOffset(utc).format('YYYY-MM-DD');
|
|
var yesterday = moment(new Date()).utcOffset(utc).subtract(1, 'days').format('YYYY-MM-DD');
|
|
|
|
this.set({
|
|
current: today,
|
|
date: yesterday
|
|
});
|
|
|
|
return new NASAView({
|
|
model: this,
|
|
submitButton: this._submitButton
|
|
});
|
|
},
|
|
|
|
hasAlreadyAddedLayer: function (userLayers) {
|
|
var urlTemplate = this.get('layer').get('urlTemplate');
|
|
return _.any(userLayers.isCustomCategory(), function (customLayer) {
|
|
return customLayer.get('urlTemplate') === urlTemplate;
|
|
});
|
|
},
|
|
|
|
_initBinds: function () {
|
|
this.bind('change:date change:layerType', this._onChange, this);
|
|
},
|
|
|
|
_onChange: function () {
|
|
var dateStr = this.get('date');
|
|
var layerType = this.get('layerType');
|
|
|
|
var url = _.template(TYPES[layerType].url)({
|
|
date: dateStr
|
|
});
|
|
|
|
var name = TYPES[layerType].name;
|
|
|
|
if (layerType === 'day') {
|
|
name = name + ' ' + dateStr;
|
|
}
|
|
|
|
var layer = new CustomBaselayerModel({
|
|
urlTemplate: url,
|
|
attribution: TYPES[layerType].attribution,
|
|
maxZoom: TYPES[layerType].maxZoom,
|
|
minZoom: TYPES[layerType].minZoom,
|
|
name: name,
|
|
category: 'NASA',
|
|
type: 'Tiled'
|
|
});
|
|
layer.set('className', layer._generateClassName(url));
|
|
|
|
this.set('layer', layer);
|
|
}
|
|
|
|
});
|