Мне нужно составить маршрутный маршрут для трамваев и метролинов для школьного проекта. Мне дали этот фрагмент кода, который обрабатывает 19 JSON файлов с данными трамвая и метролина. Это включает в себя такие вещи, как имя остановки, местоположение остановки и т. Д. c.
/**
* ImportMap is a function that read the content from a URL and expects JSON in return.
* It then hands over the content to the function processMap to actually process its content
*
* @param {*} fileName
*/
function importMap (fileName) {
var xmlhttp = new XMLHttpRequest();
var url = fileName;
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var myArr = JSON.parse(this.responseText);
processMapInfo(myArr);
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
/**
* Reads the line information and updates the internal map structure
* @param {*} lineData (JSON string as object)
*/
function processMapInfo (lineData) {
listOfLines.push(lineData)
var mainItem;
var networkItem;
var networkItemStop;
var listOfStops = {}; // declared as associative array
for (mainItem in lineData) {
logInfo (mainItem,LOG_DETAILS);
// There should be only 1 mainItem that starts with something like "GVB_"
// We need this to access the other information
/* First read the transportation type and its id */
typeOfTransportation = lineData[mainItem]["Line"].TransportType;
idOfTransportation = lineData[mainItem]["Line"].LinePublicNumber;
for (networkItem in lineData[mainItem]["Network"]) {
// usually there are 1 or 2 networkItems that each represent a list of network stops
for (networkItemStop in lineData[mainItem]["Network"][networkItem]) {
// scan all stops
// add a stop to a list based on its order; this is described by UserStopOrderNumber
// but only when it does not exist already
if (!listOfStops.hasOwnProperty(lineData[mainItem]["Network"][networkItem][networkItemStop].UserStopOrderNumber)) {
listOfStops [lineData[mainItem]["Network"][networkItem][networkItemStop].UserStopOrderNumber] =
lineData[mainItem]["Network"][networkItem][networkItemStop].TimingPointName;
}
}
}
}
logInfo (listOfStops,LOG_DETAILS);
// listOfStops now has all the info to update your map structure :-)
}
/**
* We need a way to check that ALL imports have finished as this is a ASYNCHRONOUS process
* @param {*} expectedNumberOfFiles
*/
function checkImport (expectedNumberOfFiles) {
console.log(listOfLines);
if (listOfLines.length == expectedNumberOfFiles) {
clearTimeout ();
// etc... all JSON files have been processed ... do your thing :-)
}
}
importMap ("./JSON_files/GVB_1_1.json");
importMap ("./JSON_files/GVB_2_1.json");
importMap ("./JSON_files/GVB_3_1.json");
importMap ("./JSON_files/GVB_4_1.json");
importMap ("./JSON_files/GVB_5_1.json");
importMap ("./JSON_files/GVB_7_1.json");
importMap ("./JSON_files/GVB_11_1.json");
importMap ("./JSON_files/GVB_12_1.json");
importMap ("./JSON_files/GVB_13_1.json");
importMap ("./JSON_files/GVB_14_1.json");
importMap ("./JSON_files/GVB_17_1.json");
importMap ("./JSON_files/GVB_19_1.json");
importMap ("./JSON_files/GVB_24_1.json");
importMap ("./JSON_files/GVB_26_1.json");
importMap ("./JSON_files/GVB_50_1.json");
importMap ("./JSON_files/GVB_51_1.json");
importMap ("./JSON_files/GVB_52_1.json");
importMap ("./JSON_files/GVB_53_1.json");
importMap ("./JSON_files/GVB_54_1.json");
// add a short wait so we know ALL 19 lines have been processed
setTimeout (checkImport (19),1000);
Если честно, я понятия не имею, что именно делает этот код и как он это делает. Но я думаю, что listOfStops содержит все остановки, и эта функция помещает их в эту переменную.
Для планировщика маршрута я должен использовать алгоритм Дийктры. Но прежде чем я смогу использовать алгоритм, мне нужен график, который содержит все остановки в виде узлов и добавляет ребра. Я нашел некоторую информацию в Интернете, но они вручную создавали узлы и ребра. Поскольку есть много остановок, я искал способ создать график из (я думаю) массива listOfStops. Я нашел несколько возможных решений в Интернете, но они используют внешние библиотеки или фреймворки. Моя школа решила, что мне нужно все делать самостоятельно, поэтому никакие внешние библиотеки фреймворков использовать нельзя. Это избавило от всех этих решений.
Я ищу любую возможную помощь по крайней мере для создания графика. Я понятия не имею, как это сделать, и не могу найти ничего в Google или в stackoverflow.
Это один из файлов, который содержит информацию о строке: https://ori.clow.nl/algds/GVB_1_1.json
Любая помощь будет оценена!