cartodb/lib/assets/javascripts/builder/data/wms-service.js

87 lines
2.1 KiB
JavaScript
Raw Normal View History

2020-06-15 10:58:47 +08:00
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;