Files
aladin-lite/src/js/PlanetaryFeaturesNameResolver.js
2024-02-29 18:13:22 +01:00

98 lines
3.5 KiB
JavaScript

// Copyright 2023 - UDS/CNRS
// The Aladin Lite program is distributed under the terms
// of the GNU General Public License version 3.
//
// This file is part of Aladin Lite.
//
// Aladin Lite is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 3 of the License.
//
// Aladin Lite is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// The GNU General Public License is available in COPYING file
// along with Aladin Lite.
//
/******************************************************************************
* Aladin Lite project
*
* File PlanetaryFeaturesNameResolver.js
*
* Author: Thomas Boch[CDS]
*
*****************************************************************************/
import { Utils } from "./Utils";
export let PlanetaryFeaturesNameResolver = (function() {
let PlanetaryFeaturesNameResolver = {};
PlanetaryFeaturesNameResolver.cache = {};
PlanetaryFeaturesNameResolver.URL = 'https://alasky.cds.unistra.fr/planetary-features/resolve';
function csvToArray(text) {
let p = '', row = [''], ret = [row], i = 0, r = 0, s = !0, l;
for (l of text) {
if ('"' === l) {
if (s && l === p) row[i] += l;
s = !s;
} else if (',' === l && s) l = row[++i] = '';
else if ('\n' === l && s) {
if ('\r' === p) row[i] = row[i].slice(0, -1);
row = ret[++r] = [l = '']; i = 0;
} else row[i] += l;
p = l;
}
return ret;
};
PlanetaryFeaturesNameResolver.resolve = function(featureName, body, callbackFunctionSuccess, callbackFunctionError) {
const url = PlanetaryFeaturesNameResolver.URL;
Utils.fetch({
url: url ,
desc: "Resolving planet name: " + featureName,
data: {"identifier": featureName, 'body': body, 'threshold': 0.7, 'format': 'csv'},
method: 'GET',
dataType: 'text',
success: function(result) {
const lines = result.split('\n');
const fields = csvToArray(lines[0])[0];
if (lines.length>1 && lines[1].length>0) {
const values = csvToArray(lines[1])[0];
const lonFieldIdx = fields.findIndex((element) => element. includes('longitude'));
const latFieldIdx = fields.findIndex((element) => element. includes('latitude'));
let lon = parseFloat(values[lonFieldIdx]);
const lat = parseFloat(values[latFieldIdx]);
let eastIncreasing = true;
const coordinateSystemIdx = fields.indexOf('coordinate_system');
if (coordinateSystemIdx>0 && values[coordinateSystemIdx].includes("+West")) {
eastIncreasing = false;
}
if (! eastIncreasing) {
lon = 360 - lon;
}
callbackFunctionSuccess({lon: lon, lat: lat});
}
else {
callbackFunctionError(data);
}
},
error: callbackFunctionError
});
};
return PlanetaryFeaturesNameResolver;
})();