87 lines
2.1 KiB
JavaScript
87 lines
2.1 KiB
JavaScript
|
var _ = require('underscore');
|
||
|
|
||
|
var PROXY_URL = 'https://cartodb-wms.global.ssl.fastly.net/api';
|
||
|
var PROXY_TILES = 'https://cartodb-wms.global.ssl.fastly.net/mapproxy';
|
||
|
var METHOD_TO_URL = {
|
||
|
'read': '/check',
|
||
|
'create': '/add'
|
||
|
};
|
||
|
var SUPPORTED_MATRIX_SETS = [
|
||
|
'EPSG:4326',
|
||
|
'EPSG:4258'
|
||
|
];
|
||
|
|
||
|
function WMSService () {
|
||
|
this._wms_url = null;
|
||
|
}
|
||
|
|
||
|
WMSService.prototype.generateURL = function (opts) {
|
||
|
var req = PROXY_URL + METHOD_TO_URL[opts.method];
|
||
|
var url = this._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 = opts.type === 'wmts';
|
||
|
req += '&type=' + (isWMTS ? 'wmts' : 'wms');
|
||
|
|
||
|
if (opts.method === 'create') {
|
||
|
if (opts.layer && opts.srs) {
|
||
|
req += '&layer=' + opts.layer;
|
||
|
req += '&srs=EPSG:' + opts.srs[0].split(':')[1];
|
||
|
} else if (isWMTS && opts.layer && opts.matrix_sets.length > 0) {
|
||
|
req += '&layer=' + opts.layer;
|
||
|
req += '&matrix_set=' + this.supportedMatrixSets(opts.matrix_sets || [])[0];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return req;
|
||
|
};
|
||
|
|
||
|
WMSService.prototype.getFetchLayersURL = function () {
|
||
|
return this.generateURL({
|
||
|
method: 'read'
|
||
|
});
|
||
|
};
|
||
|
|
||
|
WMSService.prototype.saveLayerURL = function (opts) {
|
||
|
var createOpts = _.extend({
|
||
|
method: 'create'
|
||
|
}, opts);
|
||
|
|
||
|
return this.generateURL(createOpts);
|
||
|
};
|
||
|
|
||
|
WMSService.prototype.supportedMatrixSets = function (matrixSets) {
|
||
|
return _.intersection(matrixSets, SUPPORTED_MATRIX_SETS);
|
||
|
};
|
||
|
|
||
|
WMSService.prototype.getProxyTilesURL = function () {
|
||
|
return PROXY_TILES;
|
||
|
};
|
||
|
|
||
|
WMSService.prototype.setUrl = function (url) {
|
||
|
this._wms_url = url;
|
||
|
};
|
||
|
|
||
|
module.exports = WMSService;
|