var layerdownloads_translation = { el_gr: { download: 'Τηλεφόρτωση' }, en_us: { download: 'Download' } }; function layerDownloadBBOX(_layerObject) { var _b = new OpenLayers.Bounds.fromString(mapBBOXToString(_layerObject)); return _b; } var layerdownloads = function () { return { text: layerdownloads_translation[language].download, iconCls:'features_toolbar_download', listeners: { render: function () { var _layerId = this.ownerCt._nodeId; if ((mapFindLayerById(_layerId)._serviceObject._isService) && (mapFindLayerById(_layerId)._serviceObject._serviceUrl.includes('sentinel'))) { this.setMenu(Ext.create("Ext.menu.Menu", { floating: true, items: [{ text: 'GeoTIFF', iconCls: 'tiff', handler: function () { var _serviceObject = mapFindLayerById(_layerId)._serviceObject; var _layerObject = mapFindLayerById(_layerId)._layerObject; var _layerName = _layerObject._layerName; var _url = fn_downloadLayerSentinel(_layerObject, _serviceObject, "image/tiff;depth=32f", "image/tiff", "", ""); fn_downloadoptions(_layerName + '.tiff', _url) } }] })); } else if ((mapFindLayerById(_layerId)._serviceObject._isService) && ((mapFindLayerById(_layerId)._serviceObject._serviceType == "WFS") || (mapFindLayerById(_layerId)._serviceObject._serviceType == "WMS"))) { this.setMenu(Ext.create("Ext.menu.Menu", { floating: true, items: [{ text: 'DXF', iconCls: 'svg', handler: function () { var _serviceObject = mapFindLayerById(_layerId)._serviceObject; var _layerObject = mapFindLayerById(_layerId)._layerObject; var _layerName = _layerObject._layerName; var _url = fn_downloadLayer(_layerObject, _serviceObject, "dxf", "application/dxf", "", ""); fn_downloadoptions(_layerName + '.dxf', _url.replace('REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS','REQUEST=GetFeature&service=wfs&version=2.0.0&typeName').replace('FORMAT=dxf','outputFormat=dxf').split('&TRANSPARENT')[0]) } }, { text: 'CSV', iconCls: 'csv', handler: function () { var _serviceObject = mapFindLayerById(_layerId)._serviceObject; var _layerObject = mapFindLayerById(_layerId)._layerObject; var _w = fn_downloadLayerCharset(_layerObject, _serviceObject, "csv", "text/csv"); _w.show(); } }, { text: 'KML', iconCls: 'kml', handler: function () { var _serviceObject = mapFindLayerById(_layerId)._serviceObject; var _layerObject = mapFindLayerById(_layerId)._layerObject; var _layerName = _layerObject._layerName; var _url = fn_downloadLayer(_layerObject, _serviceObject, "kml", "application/vnd.google-earth.kml+xml kml", "", ""); fn_downloadoptions(_layerName + '.kml', _url) } }, { text: 'PDF', iconCls: 'pdf', handler: function () { var _serviceObject = mapFindLayerById(_layerId)._serviceObject; var _layerObject = mapFindLayerById(_layerId)._layerObject; var _layerName = _layerObject._layerName; var _url = fn_downloadLayer(_layerObject, _serviceObject, "application/pdf", "application/pdf", "", ""); fn_downloadoptions(_layerName + '.pdf', _url) } }, { text: 'Shapefile', iconCls: 'shapefile', handler: function () { var _serviceObject = mapFindLayerById(_layerId)._serviceObject; var _layerObject = mapFindLayerById(_layerId)._layerObject; var _w = fn_downloadLayerCharset(_layerObject, _serviceObject, "shape-zip", "application/zip"); _w.show(); } }, { text: 'SVG', iconCls: 'svg', handler: function () { var _serviceObject = mapFindLayerById(_layerId)._serviceObject; var _layerObject = mapFindLayerById(_layerId)._layerObject; var _layerName = _layerObject._layerName; var _url = fn_downloadLayer(_layerObject, _serviceObject, "image/svg", "image/svg", "", ""); fn_downloadoptions(_layerName + '.svg', _url) } }, { text: 'TIFF', iconCls: 'tiff', handler: function () { var _serviceObject = mapFindLayerById(_layerId)._serviceObject; var _layerObject = mapFindLayerById(_layerId)._layerObject; var _layerName = _layerObject._layerName; var _url = fn_downloadLayer(_layerObject, _serviceObject, "image/tiff", "image/tiff", "", ""); fn_downloadoptions(_layerName + '.tiff', _url) } }] })); } } } } } function fn_downloadLayerCharset(_layerObject, _serviceObject, _format, _content_type) { var _projection_systems = new Array(); var _config = new _config_init_map(); for (var i = 0; i < _config._mapProjections.length; i++) { var _proj = _config._mapProjections[i]; _projection_systems.push([_proj._title, _proj._epsg]); } var _w = new Ext.Window({ width: 380, height: 140, modal: true, resizable: false, plain: true, layout: 'border', items: [{ xtype: 'form', region: 'center', items: [ { xtype: 'combo', loadMask: true, autoScroll: true, autoShow: true, id: 'downloadLayer_charset_id', fieldLabel: _featuredownload_charset, store: new Ext.data.SimpleStore({ fields: ['title', 'value'], data: _config._charsets }), displayField: 'title', valueField: 'value', emptyText: "ISO 8859-7", value: "ISO-8859-7", forceSelection: true, triggerAction: 'all', selectOnFocus: false, mode: 'local', editable: false }, { xtype: 'combo', loadMask: true, autoScroll: true, autoShow: true, id: 'downloadLayer_srs_id', fieldLabel: _featuredownload_srs, store: new Ext.data.SimpleStore({ fields: ['title', 'value'], data: _projection_systems }), displayField: 'title', valueField: 'value', emptyText: _config._mapProjections[0]._title, value: _config._mapProjections[0]._epsg, forceSelection: true, triggerAction: 'all', selectOnFocus: false, mode: 'local', editable: false }], bbar: ['->', { xtype: 'button', text: _featuredownload_downloadbtn, iconCls: 'maptab_toolbar_search', handler: function () { var _charset = Ext.getCmp("downloadLayer_charset_id").getValue(); var _epsg = Ext.getCmp("downloadLayer_srs_id").getValue(); var _layerName = _layerObject._layerName; var _url = fn_downloadLayer(_layerObject, _serviceObject, _format, _content_type, _charset, _epsg); if ((_format == "shape-zip") || (_format == "csv")) { _url = fn_downloadLayerVector(_layerObject, _serviceObject, _format, _content_type, _charset, _epsg); } if(_format == "shape-zip"){ fn_downloadoptions(_layerName + '.zip', _url); }else{ fn_downloadoptions(_layerName + '.csv', _url); } } }] }] }); return _w; } function fn_downloadoptions(type,_url){ // if(window.location.href.indexOf("admin") > -1){ // if(_url.includes('OUTPUTFORMAT=csv')){ // window.open(_url); // }else{ var saveByteArray = (function () { var a = document.createElement("a"); document.body.appendChild(a); a.style = "display: none"; return function (data, name) { var blob = new Blob(data, {type: "octet/stream"}), url = window.URL.createObjectURL(blob); a.href = url; a.download = name; a.click(); window.URL.revokeObjectURL(url); }; }()); var promise = new Promise(function(resolve, reject) { var request = new XMLHttpRequest(); request.responseType = "blob"; request.open('GET', _url); request.onload = function() { if (request.status === 200) { resolve(request.response); // we got data here, so resolve the Promise } else { reject(Error(request.statusText)); // status is not 200 OK, so reject } }; request.onerror = function() { reject(Error('Error fetching data.')); // error occurred, reject the Promise }; request.send(); //send the request }); promise.then(function(data) { saveByteArray([data], type); }); // } // }else{ // window.open(_url); // } } function fn_downloadLayer(_layerObject, _serviceObject, _format, _content_type, _charset, _epsg) { var _bbox = new layerDownloadBBOX(_layerObject); var _width = _bbox.getWidth(); var _height = _bbox.getHeight(); var _newWidth = 800; var _ratio = (_height / _width); var _newHeight = Math.floor(_newWidth * _ratio); var lTIME = ''; var lSTYLE = ''; if(typeof _layerObject._layer.params['TIME'] !== 'undefined'){ lTIME = _layerObject._layer.params['TIME']; } if(typeof _layerObject._layer.params['STYLES'] !== 'undefined'){ lSTYLE = _layerObject._layer.params['STYLES']; } var _url = Ext.urlAppend(_serviceObject._serviceUrl, "REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=" + _layerObject._layerName + "&FORMAT=" + _format + "&TRANSPARENT=TRUE&SRS=EPSG:4326&BBOX=" + _bbox.toString() + "&WIDTH=" + _newWidth + "&HEIGHT=" + _newHeight + "&TIME=" + lTIME + "&STYLE=" + lSTYLE ); if (_charset != "") { _url = Ext.urlAppend(_url, "FORMAT_OPTIONS=CHARSET:" + _charset); } if (_epsg != "") { _url = Ext.urlAppend(_url, "SRSNAME=" + _epsg); } if (_serviceObject._isSecure) { _url = _proxy_url + "?proxy=raw&contentype=" + _content_type + "&url=" + _url; } return _url; } function fn_downloadLayerSentinel(_layerObject, _serviceObject, _format, _content_type, _charset, _epsg) { var ATMFILTER; var MAXCC; var CLOUDCORRECTION; var CLOUDBUFFER; var PRIORITY; var PREVIEW; var GAIN; var GAMMA; var OFFSET; var QUALITY; var UPSAMPLING; var DOWNSAMPLING; var lTIME = ''; var lSTYLE = ''; if (_layerObject._layer.params['ATMFILTER'] != null) { ATMFILTER = _layerObject._layer.params['ATMFILTER']; } else { ATMFILTER = 'NONE'; } if (_layerObject._layer.params['MAXCC'] != null) { MAXCC = _layerObject._layer.params['MAXCC']; } else { MAXCC = 20; } if (_layerObject._layer.params['CLOUDCORRECTION'] != null) { CLOUDCORRECTION = _layerObject._layer.params['CLOUDCORRECTION']; } else { CLOUDCORRECTION = 'none'; } if (_layerObject._layer.params['CLOUDBUFFER'] != null) { CLOUDBUFFER = _layerObject._layer.params['CLOUDBUFFER']; } else { CLOUDBUFFER = 320; } if (_layerObject._layer.params['PRIORITY'] != null) { PRIORITY = _layerObject._layer.params['PRIORITY']; } else { PRIORITY = 'mostRecent'; } if (_layerObject._layer.params['PREVIEW'] != null) { PREVIEW = _layerObject._layer.params['PREVIEW']; } else { PREVIEW = '0'; } if (_layerObject._layer.params['GAIN'] != null) { GAIN = _layerObject._layer.params['GAIN']; } else { GAIN = 1; } if (_layerObject._layer.params['GAMMA'] != null) { GAMMA = _layerObject._layer.params['GAMMA']; } else { GAMMA = 1; } if (_layerObject._layer.params['OFFSET'] != null) { OFFSET = _layerObject._layer.params['OFFSET']; } else { OFFSET = 0; } if (_layerObject._layer.params['QUALITY'] != null) { QUALITY = _layerObject._layer.params['QUALITY']; } else { QUALITY = 90; } if (_layerObject._layer.params['UPSAMPLING'] != null) { UPSAMPLING = _layerObject._layer.params['UPSAMPLING']; } else { UPSAMPLING = 'NEAREST'; } if (_layerObject._layer.params['DOWNSAMPLING'] != null) { DOWNSAMPLING = _layerObject._layer.params['DOWNSAMPLING']; } else { DOWNSAMPLING = 'NEAREST'; } if(typeof _layerObject._layer.params['TIME'] !== 'undefined'){ lTIME = _layerObject._layer.params['TIME']; } if(typeof _layerObject._layer.params['STYLES'] !== 'undefined'){ lSTYLE = _layerObject._layer.params['STYLES']; } var _bbox = map.getExtent(); var _width = _bbox.getWidth(); var _height = _bbox.getHeight(); var _newWidth = 800; var _ratio = (_height / _width); var _newHeight = Math.floor(_newWidth * _ratio); var _url = Ext.urlAppend(_serviceObject._serviceUrl.replace('wms', 'wcs'), "REQUEST=GetCoverage&SERVICE=WCS&VERSION=1.0.0&COVERAGE=" + _layerObject._layerName + "&identifiers=" + _layerObject._layerName + "&FORMAT=" + _format + "&CRS=EPSG:3857&BBOX=" + _bbox.left + "," + _bbox.bottom + "," + _bbox.right + "," + _bbox.top + "" + "&subset=y(" + _bbox.bottom + "," + _bbox.top + ")&subset=x(" + _bbox.left + "," + _bbox.right + ")" // + "&RESX=" + _width // + "&RESY=" + _height + "&ATMFILTER=" + ATMFILTER + "&MAXCC=" + MAXCC + "&CLOUDCORRECTION=" + CLOUDCORRECTION + "&CLOUDBUFFER=" + CLOUDCORRECTION + "&CLOUDBUFFER=" + CLOUDBUFFER + "&PRIORITY=" + PRIORITY + "&PREVIEW=" + PREVIEW + "&GAIN=" + GAIN + "&GAMMA=" + GAMMA + "&OFFSET=" + OFFSET + "&QUALITY=" + QUALITY + "&UPSAMPLING=" + UPSAMPLING + "&DOWNSAMPLING=" + DOWNSAMPLING + "&TIME=" + lTIME + "&STYLE=" + lSTYLE ); if (_charset != "") { _url = Ext.urlAppend(_url, "FORMAT_OPTIONS=CHARSET:" + _charset); } if (_epsg != "") { _url = Ext.urlAppend(_url, "SRSNAME=" + _epsg); } if (_serviceObject._isSecure) { _url = _proxy_url + "?proxy=raw&contentype=" + _content_type + "&url=" + _url; } return _url; } function fn_downloadLayerVector(_layerObject, _serviceObject, _format, _content_type, _charset, _epsg) { var _bbox = new layerDownloadBBOX(_layerObject); var _width = _bbox.getWidth(); var _height = _bbox.getHeight(); var _newWidth = 800; var _ratio = (_height / _width); var _newHeight = Math.floor(_newWidth * _ratio); var lTIME = ''; var lSTYLE = ''; if(typeof _layerObject._layer.params['TIME'] !== 'undefined'){ lTIME = _layerObject._layer.params['TIME']; } if(typeof _layerObject._layer.params['STYLES'] !== 'undefined'){ lSTYLE = _layerObject._layer.params['STYLES']; } var _url = Ext.urlAppend(_serviceObject._serviceUrl, "REQUEST=GETFEATURE&SERVICE=WFS&VERSION=1.1.0&TYPENAMES=" + _layerObject._layerName + "&OUTPUTFORMAT=" + _format + "&TIME=" + lTIME + "&STYLE=" + lSTYLE ); _url = _url.replace("WMS", "WFS"); _url = _url.replace("Wms", "Wfs"); _url = _url.replace("wms", "wfs"); if (_charset != "") { _url = Ext.urlAppend(_url, "FORMAT_OPTIONS=CHARSET:" + _charset); } if (_epsg != "") { _url = Ext.urlAppend(_url, "SRSNAME=" + _epsg); } if (_serviceObject._isSecure) { _url = _proxy_url + "?proxy=raw&contentype=" + _content_type + "&url=" + _url; } return _url; } init_onload_fn.push(init_layerdownloads); function init_layerdownloads() { _maptab_west_layer_layer_menu_components.push(new layerdownloads); }