You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
556 lines
18 KiB
556 lines
18 KiB
2 years ago
|
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);
|
||
|
|
||
|
|
||
|
}
|