mirror of
https://github.com/cds-astro/aladin-lite.git
synced 2026-01-15 22:42:45 -08:00
98 lines
3.5 KiB
JavaScript
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;
|
|
})();
|
|
|