92 lines
2.7 KiB
JavaScript
92 lines
2.7 KiB
JavaScript
|
cdb.admin.WMSService = Backbone.Model.extend({
|
||
|
|
||
|
_PROXY_URL: '//cartodb-wms.global.ssl.fastly.net/api',
|
||
|
_PROXY_TILES: '//cartodb-wms.global.ssl.fastly.net/mapproxy',
|
||
|
|
||
|
methodToURL: {
|
||
|
'read': '/check',
|
||
|
'create': '/add'
|
||
|
},
|
||
|
|
||
|
sync: function(method, model, options) {
|
||
|
options = options || {};
|
||
|
options.url = this.url(method.toLowerCase());
|
||
|
options.dataType = 'jsonp';
|
||
|
method = "READ";
|
||
|
return Backbone.sync.apply(this, arguments);
|
||
|
},
|
||
|
|
||
|
url: function(method) {
|
||
|
var req = this._PROXY_URL + this.methodToURL[method];
|
||
|
var url = this.get('wms_url');
|
||
|
|
||
|
var parser = document.createElement('a');
|
||
|
|
||
|
parser.href = url;
|
||
|
|
||
|
var params = parser.search.substr(1).split("&");
|
||
|
|
||
|
var hasCapabilities = _.find(params, function(p) { return p.toLowerCase().indexOf("request=getcapabilities") !== -1; });
|
||
|
var hasService = _.find(params, function(p) { return p.toLowerCase().indexOf("service=wms") !== -1; });
|
||
|
|
||
|
// If the user didn't provided the necessary params, let's add them
|
||
|
|
||
|
if (!hasCapabilities) {
|
||
|
params.push("request=GetCapabilities");
|
||
|
}
|
||
|
|
||
|
if (!hasService) {
|
||
|
params.push("service=WMS");
|
||
|
}
|
||
|
|
||
|
url += "?" + params.join("&");
|
||
|
req += '?url=' + encodeURIComponent(url);
|
||
|
|
||
|
var isWMTS = this.get('type') === 'wmts';
|
||
|
req += '&type=' + (isWMTS ? 'wmts' : 'wms');
|
||
|
|
||
|
if (method === 'create') {
|
||
|
if (this.get('layer') && this.get('srs')) {
|
||
|
req += "&layer=" + this.get('layer');
|
||
|
req += "&srs=EPSG:" + this.get('srs')[0].split(':')[1];
|
||
|
} else if (isWMTS && this.get('layer') && this.get('matrix_sets').length > 0) {
|
||
|
req += '&layer=' + this.get('layer');
|
||
|
req += '&matrix_set=' + cdb.admin.WMSService.supportedMatrixSets(this.get('matrix_sets' || []))[0];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return req;
|
||
|
},
|
||
|
|
||
|
newTileLayer: function() {
|
||
|
if (!this.get('mapproxy_id')) {
|
||
|
throw new Error('mapproxy_id must be set');
|
||
|
}
|
||
|
return new cdb.admin.TileLayer({
|
||
|
urlTemplate: this._PROXY_TILES + '/' + this.get('mapproxy_id') + '/wmts/map/webmercator/{z}/{x}/{y}.png',
|
||
|
attribution: this.get('attribution') || null,
|
||
|
maxZoom: 21,
|
||
|
minZoom: 0,
|
||
|
name: this.get('title') || this.get('name'),
|
||
|
proxy: true,
|
||
|
bounding_boxes: this.get('bounding_boxes')
|
||
|
});
|
||
|
}
|
||
|
}, {
|
||
|
|
||
|
SUPPORTED_MATRIX_SETS: [
|
||
|
'EPSG:4326',
|
||
|
'EPSG:4258'
|
||
|
],
|
||
|
|
||
|
/**
|
||
|
* Unfortunately the WMS proxy do not support all matrix sets for a WMTS kind of resource, so filter out the ones
|
||
|
* that are actually supported for now.
|
||
|
* @return {Array}
|
||
|
*/
|
||
|
supportedMatrixSets: function(matrixSets) {
|
||
|
// matrixSets = matrixSets || [];
|
||
|
return _.intersection(matrixSets, this.SUPPORTED_MATRIX_SETS);
|
||
|
}
|
||
|
});
|