|
@@ -7,19 +7,19 @@ var where = require('lodash.where');
|
|
|
|
|
|
|
|
const app = express();
|
|
const app = express();
|
|
|
|
|
|
|
|
-const _datasetsFilePath = 'data/datasets.csv';
|
|
|
|
|
|
|
+const _datasetsEuFilePath = 'data/datasets.csv';
|
|
|
const _datasetsCzFilePath = 'data/datasets-cz.csv';
|
|
const _datasetsCzFilePath = 'data/datasets-cz.csv';
|
|
|
-const _dataFilePath = 'data/data.csv';
|
|
|
|
|
|
|
+const _dataEuFilePath = 'data/data.csv';
|
|
|
const _dataCzFilePath = 'data/cz/data-input-CZ_LAU2_37_cols.csv';
|
|
const _dataCzFilePath = 'data/cz/data-input-CZ_LAU2_37_cols.csv';
|
|
|
-//const _clusteringInputFilePath = 'data/clustering/input_all.csv';
|
|
|
|
|
|
|
+//const _clusteringEuInputFilePath = 'data/clustering/input_all.csv';
|
|
|
const _clusteringCzInputFilePath = 'data/cz/clusters-input-CZ_LAU2_37_cols.csv';
|
|
const _clusteringCzInputFilePath = 'data/cz/clusters-input-CZ_LAU2_37_cols.csv';
|
|
|
-const _clusteringModifiedFilePath = 'data/clustering/input_modified.csv';
|
|
|
|
|
|
|
+const _clusteringEuModifiedFilePath = 'data/clustering/input_modified.csv';
|
|
|
const _clusteringCzModifiedFilePath = 'data/cz/input_modified.csv';
|
|
const _clusteringCzModifiedFilePath = 'data/cz/input_modified.csv';
|
|
|
-const _clustersFilePath = 'data/clustering/out_file.csv';
|
|
|
|
|
|
|
+const _clustersEuFilePath = 'data/clustering/out_file.csv';
|
|
|
const _clustersCzFilePath = 'data/cz/out_file_cz.csv';
|
|
const _clustersCzFilePath = 'data/cz/out_file_cz.csv';
|
|
|
-var _datasets = undefined;
|
|
|
|
|
|
|
+var _datasetsEu = undefined;
|
|
|
var _datasetsCZ = undefined;
|
|
var _datasetsCZ = undefined;
|
|
|
-var _ruralData = undefined;
|
|
|
|
|
|
|
+var _ruralDataEu = undefined;
|
|
|
var _ruralDataCZ = undefined;
|
|
var _ruralDataCZ = undefined;
|
|
|
|
|
|
|
|
// parse incoming POST requests body to JSON
|
|
// parse incoming POST requests body to JSON
|
|
@@ -40,10 +40,10 @@ app.get('/', (req, res) => {
|
|
|
Must be called after the CSV data has changed */
|
|
Must be called after the CSV data has changed */
|
|
|
app.get('/refresh', async (req, res, next) => {
|
|
app.get('/refresh', async (req, res, next) => {
|
|
|
try {
|
|
try {
|
|
|
- _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
|
|
|
|
+ _datasetsEu = await nutsData.loadDatasets(_datasetsEuFilePath)
|
|
|
_datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
_datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
|
//console.log('Datasets loaded succesfully');
|
|
//console.log('Datasets loaded succesfully');
|
|
|
- _ruralData = await nutsData.loadRuralData(_dataFilePath, _datasets)
|
|
|
|
|
|
|
+ _ruralDataEu = await nutsData.loadRuralData(_dataEuFilePath, _datasetsEu)
|
|
|
_ruralDataCZ = await nutsData.loadRuralData(_datasetsCzFilePath, _datasetsCZ)
|
|
_ruralDataCZ = await nutsData.loadRuralData(_datasetsCzFilePath, _datasetsCZ)
|
|
|
//console.log('Rural data loaded succesfully');
|
|
//console.log('Rural data loaded succesfully');
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
@@ -56,15 +56,15 @@ app.get('/refresh', async (req, res, next) => {
|
|
|
app.get('/:aoi?/datasets/', async (req, res, next) => {
|
|
app.get('/:aoi?/datasets/', async (req, res, next) => {
|
|
|
console.log('received datasets/ GET request')
|
|
console.log('received datasets/ GET request')
|
|
|
const aoi = req.params.aoi || 'eu'
|
|
const aoi = req.params.aoi || 'eu'
|
|
|
- let datasets = aoi == 'cz' ? _datasetsCZ : _datasets
|
|
|
|
|
|
|
+ let datasets = aoi == 'cz' ? _datasetsCZ : _datasetsEu
|
|
|
if (!datasets) {
|
|
if (!datasets) {
|
|
|
try {
|
|
try {
|
|
|
if (aoi == 'cz') {
|
|
if (aoi == 'cz') {
|
|
|
_datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
_datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
|
datasets = _datasetsCZ
|
|
datasets = _datasetsCZ
|
|
|
} else {
|
|
} else {
|
|
|
- _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
|
|
- datasets = _datasets
|
|
|
|
|
|
|
+ _datasetsEu = await nutsData.loadDatasets(_datasetsEuFilePath)
|
|
|
|
|
+ datasets = _datasetsEu
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
res.send(e.toString() || e)
|
|
@@ -75,16 +75,16 @@ app.get('/:aoi?/datasets/', async (req, res, next) => {
|
|
|
|
|
|
|
|
/* Returns attractivity data for the region with ID equal to the 'nuts' parameter */
|
|
/* Returns attractivity data for the region with ID equal to the 'nuts' parameter */
|
|
|
app.get('/:aoi?/scores/:nuts', async (req, res, next) => {
|
|
app.get('/:aoi?/scores/:nuts', async (req, res, next) => {
|
|
|
- if (!_datasets) { // datasets must be loaded prior to data loading
|
|
|
|
|
|
|
+ if (!_datasetsEu) { // datasets must be loaded prior to data loading
|
|
|
try {
|
|
try {
|
|
|
- _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
|
|
|
|
+ _datasetsEu = await nutsData.loadDatasets(_datasetsEuFilePath)
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
res.send(e.toString() || e)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if (!_ruralData) {
|
|
|
|
|
|
|
+ if (!_ruralDataEu) {
|
|
|
try {
|
|
try {
|
|
|
- _ruralData = await nutsData.loadRuralData(_dataFilePath, _datasets)
|
|
|
|
|
|
|
+ _ruralDataEu = await nutsData.loadRuralData(_dataEuFilePath, _datasetsEu)
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
res.send(e.toString() || e)
|
|
|
}
|
|
}
|
|
@@ -96,16 +96,16 @@ app.get('/:aoi?/scores/:nuts', async (req, res, next) => {
|
|
|
app.get('/:aoi?/scores', async (req, res, next) => {
|
|
app.get('/:aoi?/scores', async (req, res, next) => {
|
|
|
console.log('received scores/cz GET request')
|
|
console.log('received scores/cz GET request')
|
|
|
const aoi = req.params.aoi || 'eu'
|
|
const aoi = req.params.aoi || 'eu'
|
|
|
- let datasets = aoi == 'cz' ? _datasetsCZ : _datasets
|
|
|
|
|
- let ruralData = aoi == 'cz' ? _ruralDataCZ : _ruralData
|
|
|
|
|
|
|
+ let datasets = aoi == 'cz' ? _datasetsCZ : _datasetsEu
|
|
|
|
|
+ let ruralData = aoi == 'cz' ? _ruralDataCZ : _ruralDataEu
|
|
|
if (!datasets) { // datasets must be loaded prior to data loading
|
|
if (!datasets) { // datasets must be loaded prior to data loading
|
|
|
try {
|
|
try {
|
|
|
if (aoi == 'cz') {
|
|
if (aoi == 'cz') {
|
|
|
_datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
_datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
|
datasets = _datasetsCZ
|
|
datasets = _datasetsCZ
|
|
|
} else {
|
|
} else {
|
|
|
- _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
|
|
- datasets = _datasets
|
|
|
|
|
|
|
+ _datasetsEu = await nutsData.loadDatasets(_datasetsEuFilePath)
|
|
|
|
|
+ datasets = _datasetsEu
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
res.send(e.toString() || e)
|
|
@@ -117,8 +117,8 @@ app.get('/:aoi?/scores', async (req, res, next) => {
|
|
|
_ruralDataCZ = await nutsData.loadRuralData(_dataCzFilePath, datasets)
|
|
_ruralDataCZ = await nutsData.loadRuralData(_dataCzFilePath, datasets)
|
|
|
ruralData = _ruralDataCZ
|
|
ruralData = _ruralDataCZ
|
|
|
} else {
|
|
} else {
|
|
|
- _ruralData = await nutsData.loadRuralData(_dataFilePath, datasets)
|
|
|
|
|
- ruralData = _ruralData
|
|
|
|
|
|
|
+ _ruralDataEu = await nutsData.loadRuralData(_dataEuFilePath, datasets)
|
|
|
|
|
+ ruralData = _ruralDataEu
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
res.send(e.toString() || e)
|
|
@@ -133,16 +133,16 @@ app.post('/:aoi?/scores', async (req, res, next) => {
|
|
|
console.log('received scores/ POST request')
|
|
console.log('received scores/ POST request')
|
|
|
//console.log("query: " + JSON.stringify(req.body.factors, null, 4));
|
|
//console.log("query: " + JSON.stringify(req.body.factors, null, 4));
|
|
|
const aoi = req.params.aoi || 'eu'
|
|
const aoi = req.params.aoi || 'eu'
|
|
|
- let datasets = aoi == 'cz' ? _datasetsCZ : _datasets
|
|
|
|
|
- let ruralData = aoi == 'cz' ? _ruralDataCZ : _ruralData
|
|
|
|
|
|
|
+ let datasets = aoi == 'cz' ? _datasetsCZ : _datasetsEu
|
|
|
|
|
+ let ruralData = aoi == 'cz' ? _ruralDataCZ : _ruralDataEu
|
|
|
if (!datasets) { // datasets must be loaded prior to data loading
|
|
if (!datasets) { // datasets must be loaded prior to data loading
|
|
|
try {
|
|
try {
|
|
|
if (aoi == 'cz') {
|
|
if (aoi == 'cz') {
|
|
|
_datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
_datasetsCZ = await nutsData.loadDatasets(_datasetsCzFilePath)
|
|
|
datasets = _datasetsCZ
|
|
datasets = _datasetsCZ
|
|
|
} else {
|
|
} else {
|
|
|
- _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
|
|
- datasets = _datasets
|
|
|
|
|
|
|
+ _datasetsEu = await nutsData.loadDatasets(_datasetsEuFilePath)
|
|
|
|
|
+ datasets = _datasetsEu
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
res.send(e.toString() || e)
|
|
@@ -154,8 +154,8 @@ app.post('/:aoi?/scores', async (req, res, next) => {
|
|
|
_ruralDataCZ = await nutsData.loadRuralData(_dataCzFilePath, datasets)
|
|
_ruralDataCZ = await nutsData.loadRuralData(_dataCzFilePath, datasets)
|
|
|
ruralData = _ruralDataCZ
|
|
ruralData = _ruralDataCZ
|
|
|
} else {
|
|
} else {
|
|
|
- _ruralData = await nutsData.loadRuralData(_dataFilePath, datasets)
|
|
|
|
|
- ruralData = _ruralData
|
|
|
|
|
|
|
+ _ruralDataEu = await nutsData.loadRuralData(_dataEuFilePath, datasets)
|
|
|
|
|
+ ruralData = _ruralDataEu
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
res.send(e.toString() || e)
|
|
@@ -202,19 +202,19 @@ app.get('/:aoi?/clusters/', (req, res, next) => {
|
|
|
*/
|
|
*/
|
|
|
app.post('/:aoi?/clusters/', async (req, res, next) => {
|
|
app.post('/:aoi?/clusters/', async (req, res, next) => {
|
|
|
const aoi = req.params.aoi || 'eu'
|
|
const aoi = req.params.aoi || 'eu'
|
|
|
- let datasets = aoi == 'cz' ? _datasetsCZ : _datasets
|
|
|
|
|
- const dataFilePath = aoi == 'cz' ? _clusteringCzInputFilePath : _dataFilePath
|
|
|
|
|
- const clusteringModifiedFilePath = aoi == 'cz' ? _clusteringCzModifiedFilePath : _clusteringModifiedFilePath
|
|
|
|
|
|
|
+ let datasets = aoi == 'cz' ? _datasetsCZ : _datasetsEu
|
|
|
|
|
+ const dataFilePath = aoi == 'cz' ? _clusteringCzInputFilePath : _dataEuFilePath
|
|
|
|
|
+ const clusteringModifiedFilePath = aoi == 'cz' ? _clusteringCzModifiedFilePath : _clusteringEuModifiedFilePath
|
|
|
const idString = aoi == 'cz' ? 'LAU2' : 'NUTS_ID'
|
|
const idString = aoi == 'cz' ? 'LAU2' : 'NUTS_ID'
|
|
|
if (!datasets) { // datasets must be loaded prior to data loading
|
|
if (!datasets) { // datasets must be loaded prior to data loading
|
|
|
try {
|
|
try {
|
|
|
- const datasetsFilePath = aoi == 'cz' ? _datasetsCzFilePath : _datasetsFilePath
|
|
|
|
|
|
|
+ const datasetsFilePath = aoi == 'cz' ? _datasetsCzFilePath : _datasetsEuFilePath
|
|
|
if (aoi == 'cz') {
|
|
if (aoi == 'cz') {
|
|
|
_datasetsCZ = await nuts.loadDatasets(_datasetsCzFilePath)
|
|
_datasetsCZ = await nuts.loadDatasets(_datasetsCzFilePath)
|
|
|
datasets = _datasetsCZ
|
|
datasets = _datasetsCZ
|
|
|
} else {
|
|
} else {
|
|
|
- _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
|
|
- datasets = _datasets
|
|
|
|
|
|
|
+ _datasetsEu = await nutsData.loadDatasets(_datasetsEuFilePath)
|
|
|
|
|
+ datasets = _datasetsEu
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
res.send(e.toString() || e)
|
|
@@ -239,16 +239,16 @@ app.post('/:aoi?/clusters/', async (req, res, next) => {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
app.get('/georeport/:nuts', async (req, res, next) => {
|
|
app.get('/georeport/:nuts', async (req, res, next) => {
|
|
|
- if (!_datasets) { // datasets must be loaded prior to data loading
|
|
|
|
|
|
|
+ if (!_datasetsEu) { // datasets must be loaded prior to data loading
|
|
|
try {
|
|
try {
|
|
|
- _datasets = await nutsData.loadDatasets(_datasetsFilePath)
|
|
|
|
|
|
|
+ _datasetsEu = await nutsData.loadDatasets(_datasetsEuFilePath)
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
res.send(e.toString() || e)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if (!_ruralData) {
|
|
|
|
|
|
|
+ if (!_ruralDataEu) {
|
|
|
try {
|
|
try {
|
|
|
- _ruralData = await nutsData.loadRuralData(_dataFilePath, _datasets)
|
|
|
|
|
|
|
+ _ruralDataEu = await nutsData.loadRuralData(_dataEuFilePath, _datasetsEu)
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
res.send(e.toString() || e)
|
|
res.send(e.toString() || e)
|
|
|
}
|
|
}
|
|
@@ -263,7 +263,7 @@ app.listen(3000, () => console.log('Rural attractivity WS listening on port 3000
|
|
|
function renderPugReport(nuts, req, res) {
|
|
function renderPugReport(nuts, req, res) {
|
|
|
let found = false;
|
|
let found = false;
|
|
|
|
|
|
|
|
- _ruralData.forEach(region => {
|
|
|
|
|
|
|
+ _ruralDataEu.forEach(region => {
|
|
|
if (region.nuts == nuts) {
|
|
if (region.nuts == nuts) {
|
|
|
|
|
|
|
|
let nutsGeoJson = helpers.loadJSON('static/NUTS3_4326.json');
|
|
let nutsGeoJson = helpers.loadJSON('static/NUTS3_4326.json');
|
|
@@ -277,7 +277,7 @@ function renderPugReport(nuts, req, res) {
|
|
|
pilot: helpers.getPilotRegion(nuts, pilots)
|
|
pilot: helpers.getPilotRegion(nuts, pilots)
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- res.render('nuts', { region: region, datasets: _datasets });
|
|
|
|
|
|
|
+ res.render('nuts', { region: region, datasets: _datasetsEu });
|
|
|
found = true;
|
|
found = true;
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
@@ -288,7 +288,7 @@ function renderPugReport(nuts, req, res) {
|
|
|
|
|
|
|
|
function returnAllScores(req, res, aoi = 'eu') {
|
|
function returnAllScores(req, res, aoi = 'eu') {
|
|
|
let resData = []
|
|
let resData = []
|
|
|
- const ruralData = aoi == 'cz' ? _ruralDataCZ : _ruralData
|
|
|
|
|
|
|
+ const ruralData = aoi == 'cz' ? _ruralDataCZ : _ruralDataEu
|
|
|
const regionIdString = aoi == 'cz' ? 'lau2' : 'nuts'
|
|
const regionIdString = aoi == 'cz' ? 'lau2' : 'nuts'
|
|
|
ruralData.forEach(region => {
|
|
ruralData.forEach(region => {
|
|
|
//var region = _ruralData[0];
|
|
//var region = _ruralData[0];
|
|
@@ -317,7 +317,7 @@ function returnRegionScores(nuts, req, res) {
|
|
|
var found = false;
|
|
var found = false;
|
|
|
res.header("Content-Type", 'application/json');
|
|
res.header("Content-Type", 'application/json');
|
|
|
|
|
|
|
|
- _ruralData.forEach(region => {
|
|
|
|
|
|
|
+ _ruralDataEu.forEach(region => {
|
|
|
if (region.nuts == nuts) {
|
|
if (region.nuts == nuts) {
|
|
|
helpers.formatResponse(region, req, res);
|
|
helpers.formatResponse(region, req, res);
|
|
|
found = true;
|
|
found = true;
|
|
@@ -333,7 +333,7 @@ function handleRCall(req, res, aoi = 'eu') {
|
|
|
const numberOfClusters = req.body.numberOfClusters || 12;
|
|
const numberOfClusters = req.body.numberOfClusters || 12;
|
|
|
//console.log('calling R...', numberOfClusters)
|
|
//console.log('calling R...', numberOfClusters)
|
|
|
const rScriptInputFileName = aoi == 'cz' ? './r/CZ_clusters.r' :'./r/selected_data.r';
|
|
const rScriptInputFileName = aoi == 'cz' ? './r/CZ_clusters.r' :'./r/selected_data.r';
|
|
|
- const rScriptResultsFileName = aoi == 'cz' ? _clustersCzFilePath : _clustersFilePath;
|
|
|
|
|
|
|
+ const rScriptResultsFileName = aoi == 'cz' ? _clustersCzFilePath : _clustersEuFilePath;
|
|
|
const idString = aoi == 'cz' ? 'lau2' : 'nuts_id';
|
|
const idString = aoi == 'cz' ? 'lau2' : 'nuts_id';
|
|
|
R(rScriptInputFileName).data(numberOfClusters).call(
|
|
R(rScriptInputFileName).data(numberOfClusters).call(
|
|
|
function (err, data) {
|
|
function (err, data) {
|