-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfetch.js
101 lines (92 loc) · 3.83 KB
/
fetch.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
const parseXml = require('./parser');
function fetchSats() {
let requestParams = {
contentType: 'application/xml',
url: 'https://sscweb.sci.gsfc.nasa.gov/WS/sscr/2/observatories'
}
let satsRequest = $.ajax(requestParams).then((res) => {
let ids = [];
let parsed = parseXml(res);
sats = parsed.ObservatoryResponse.Observatory;
for (sat of sats) {ids.push(sat.Id['#text']);}
return ids;
})
return satsRequest;
}
function buildSatelliteRequest(startTime, endTime, satelliteIds) {
let xmlBegin = '<?xml version="1.0" encoding="UTF-8" ?>';
let timeTag = `<TimeInterval><Start>${startTime}</Start><End>${endTime}</End></TimeInterval>`;
satTag = ''
for ([index, satId] of satelliteIds.entries()) {
if (index < 152) {
satTag += `<Satellites><Id>${satId}</Id><ResolutionFactor>2</ResolutionFactor></Satellites>`;
}
};
let allFiltersTag = '<AllLocationFilters>true</AllLocationFilters>';
let coordinateTag = '';
let axes = ['X', 'Y', 'Z'];
let baseAxisTag = '<CoordinateOptions><CoordinateSystem>Geo</CoordinateSystem>';
for (axis of axes) {
let thisAxisTag = `${baseAxisTag}<Component>${axis}</Component></CoordinateOptions>`;
coordinateTag += thisAxisTag
};
let minMaxTag = '<MinMaxPoints>2</MinMaxPoints>';
let outputOptionsInner = allFiltersTag + coordinateTag + minMaxTag;
let outputOptionsTag = `<OutputOptions>${outputOptionsInner}</OutputOptions>`;
let requestXML = timeTag + satTag + outputOptionsTag;
let withDataRequest = `<DataRequest xmlns="http://sscweb.gsfc.nasa.gov/schema">${requestXML}</DataRequest>`;
let result = xmlBegin + withDataRequest;
return result;
}
function getIdChunks(satelliteIds) {
chunkSize = 50;
numIds = satelliteIds.length;
chunks = []
for (let i=0; i < numIds; i+=(chunkSize+1)) {
chunks.push(satelliteIds.slice(i, i + chunkSize));
}
return chunks;
}
function fetchSatelliteCoordinates(windowObject, startTime, endTime) {
let idChunks = getIdChunks(windowObject.satelliteIds)
let totalIds = windowObject.satelliteIds.length
console.log('Nunchuks: ' + idChunks.length)
for (ids of idChunks) {
let xmlData = buildSatelliteRequest(
startTime, endTime, ids);
let requestParams = {
contentType: 'application/xml',
url: 'https://sscweb.sci.gsfc.nasa.gov/WS/sscr/2/locations',
method: 'POST',
data: xmlData
}
let locationsRequest = $.ajax(requestParams).then(
(res) => {
let parsed = parseXml(res, ['Data', 'Time', 'X', 'Y', 'Z']);
for (satellite of parsed.Response.Result.Data) {
let satelliteId = satellite.Id["#text"];
let times = satellite.Time;
for (const [idx, time] of times.entries()) {
let coordinates = [
parseFloat(satellite.Coordinates.X[idx]["#text"]),
parseFloat(satellite.Coordinates.Y[idx]["#text"]),
parseFloat(satellite.Coordinates.Z[idx]["#text"])
];
if (coordinates[2] < 0) {
coordinates[2] = -coordinates[2]
}
windowObject.addSatelliteData(
satelliteId,
time["#text"],
coordinates
);
}
};
windowObject.placeSatellites(ids);
// console.log('Put satellite render logic here')
// console.log(windowObject.satellitePositions)
}
)
};
}
module.exports = {fetchSatelliteCoordinates, fetchSats};