(function (angular) {
'use strict';
/**
* @memberof spApp
* @ngdoc directive
* @name pointComparison
* @description
* Panel for map location selection and display spatial-service layer intersections
*/
angular.module('point-comparison-directive', ['map-service', 'layers-service', 'predefined-areas-service'])
.directive('pointComparison', ['$rootScope', 'MapService', '$timeout', 'LayersService', 'LayoutService',
'PredefinedAreasService', 'LoggerService', "$http", '$filter',
function ($rootScope, MapService, $timeout, LayersService, LayoutService, PredefinedAreasService, LoggerService, $http, $filter) {
var _httpDescription = function (method, httpconfig) {
if (httpconfig === undefined) {
httpconfig = {};
}
httpconfig.service = 'PointComparison';
httpconfig.method = method;
return httpconfig;
};
return {
scope: {
_config: '=config'
},
templateUrl: '/spApp/pointComparisonContent.htm',
link: function (scope, iElement, iAttrs) {
scope.points = [];
scope.comparison = [];
scope.header = [];
scope.searchText = {name: ''};
scope.exportUrl = null;
scope.csv = null;
scope.statusUrl = null;
scope.placingMarker = false;
scope.searching = false;
scope.cancel = function () {
scope.deleteDrawing();
LayoutService.closePanel()
};
scope.update = function () {
scope.deleteDrawing();
MapService.leafletScope.addPointsToMap(scope.points)
};
scope.remove = function (idx) {
scope.points.splice(idx, 1);
scope.update()
};
scope.addMarker = function () {
scope.placingMarker = true;
$('.leaflet-draw-draw-marker')[0].click();
};
scope.stopDrawing = function () {
scope.placingMarker = false;
var a = $('.leaflet-draw-actions a');
for (var i = 0; i < a.length; i++) {
if (a[i].title === $i18n("Cancel drawing")) {
a[i].click()
}
}
};
scope.deleteDrawing = function () {
scope.stopDrawing();
MapService.leafletScope.deleteDrawing()
};
scope.compare = function () {
scope.searching = true;
var points = '';
$.map(scope.points, function (p) {
if (points.length > 0)
points = points + ",";
points = points + p[2] + ',' + p[1];
});
var fids = '';
LayersService.getLayers().then(function (response) {
$.map(response.data, function (field) {
if (fids.length > 0)
fids = fids + ',';
fids = fids + field.id;
});
//sample
if (points.length > 0) {
scope.statusUrl = $SH.samplingUrl + "/intersect/batch?points=" + points + "&fids=" + fids;
scope.checkStatus();
} else {
scope.searching = false;
}
});
};
scope.checkStatus = function () {
$http.get(scope.statusUrl, _httpDescription('checkStatus')).then(function (response) {
if (response.status === 200) {
scope.status = response.data.status;
if (response.data.statusUrl) {
scope.statusUrl = response.data.statusUrl
$timeout(scope.checkStatus(), 2000)
} else if (response.data.downloadUrl) {
LoggerService.log("View", "pointComparison", {points: $.merge([], scope.points)})
$http.get($SH.baseUrl + '/portal/getSampleCSV?url=' + encodeURIComponent(response.data.downloadUrl), _httpDescription('getCsv')).then(function (response) {
if (scope.comparison.length > 0)
scope.comparison.splice(0, scope.comparison.length);
var csv = $.csv.toArrays(response.data);
scope.header = [];
$.map(csv, function (row) {
scope.header.push(row[0] + ' ' + row[1])
});
for (var i = 2; i < csv[0].length; i++) {
var row = [BiocacheI18n.get('facet.' + csv[0][i], csv[0][i])];
for (var j = 1; j < csv.length; j++) {
row.push(csv[j][i]);
}
scope.comparison.push(row);
}
var blob = new Blob([$.csv.fromArrays([scope.header]) +
$.csv.fromArrays(scope.comparison)], {type: 'text/plain'});
scope.exportUrl = (window.URL || window.webkitURL).createObjectURL(blob);
scope.searching = false;
$timeout(function () {
$(window).trigger("resize");
}, 0);
});
} else {
$timeout(scope.checkStatus(), 2000)
}
} else {
$timeout(scope.checkStatus(), 2000)
}
}, function (err) {
$timeout(scope.checkStatus(), 2000)
});
};
$rootScope.$on('setWkt', function (event, data) {
if (data[0] === 'point') {
//points must be layer intersected
data[1] = parseFloat(data[1]).toFixed(3);
data[2] = parseFloat(data[2]).toFixed(3);
scope.points.push(data);
scope.update();
}
});
/* init */
if (!scope._config) {
scope.addMarker();
} else {
if (scope._config.points) {
scope.points = scope._config.points;
}
scope.update();
scope.compare();
}
}
}
}])
}(angular));