diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 37e8c77..0000000 --- a/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Dependency directories -node_modules/ - -# Optional npm cache directory -.npm - -# dotenv environment variables file -.env \ No newline at end of file diff --git a/client/index.html b/client/index.html index a1181c6..9ce2bd6 100644 --- a/client/index.html +++ b/client/index.html @@ -16,13 +16,15 @@ - velendeulogojpg + velendeulogojpg

TLT Location Finder

+

Type: UNFETCHED

@@ -45,16 +47,12 @@ var socket = io();// // Stuff for the map - //map = new OpenLayers.Map("demoMap");//.setView([59.4370, 24.7536], 12); - //map.addLayer(new OpenLayers.Layer.OSM()); - //map.zoomToMaxExtent(); - map = new OpenLayers.Map("demoMap"); - var mapnik = new OpenLayers.Layer.OSM(); + var mapnik = new OpenLayers.Layer.OSM(); var fromProjection = new OpenLayers.Projection("EPSG:4326"); // Transform from WGS 1984 - var toProjection = new OpenLayers.Projection("EPSG:900913"); // to Spherical Mercator Projection - var position = new OpenLayers.LonLat(24.7536, 59.4370).transform( fromProjection, toProjection); - var zoom = 12; + var toProjection = new OpenLayers.Projection("EPSG:900913"); // to Spherical Mercator Projection + var position = new OpenLayers.LonLat(24.7536, 59.4370).transform(fromProjection, toProjection); + var zoom = 12; map.addLayer(mapnik); map.setCenter(position, zoom); @@ -65,6 +63,13 @@ var tak = document.getElementById('bus-id').value.trim(); socket.emit('takSearch', tak); }); + /*document.getElementById('elektrolino').addEventListener('click', function () { + socket.emit('elektrolino'); + }); + document.getElementById('pesa').addEventListener('press', function () { + socket.emit('pesa'); + });*/ + oldMarker = "1"; socket.on('takResults', (typeR, lineR, latR, longR, takR, latlongR, vehicleTypeR) => { console.log("Datafetch success"); @@ -98,4 +103,4 @@ - \ No newline at end of file + diff --git a/client/velendeulogo.png b/client/velendeulogo.png deleted file mode 100644 index b4a75d9..0000000 Binary files a/client/velendeulogo.png and /dev/null differ diff --git a/fetchTltData.js b/fetchTltData.js deleted file mode 100644 index e69de29..0000000 diff --git a/main.js b/main.js index d418bf1..09f876a 100644 --- a/main.js +++ b/main.js @@ -1,8 +1,7 @@ -let serverPort = 80; +const serverPort = 8081; const url = "http://transport.tallinn.ee/gps.txt"; const express = require('express'); -const { fstat } = require('fs'); const app = express(); const http = require('http'); const server = http.createServer(app); @@ -10,8 +9,18 @@ const { Server } = require("socket.io"); const io = new Server(server); const axios = require('axios'); const fs = require('fs'); +const path = require('path'); -let cafTramTakArray = ["502", "520", "505", "518", "513", "507"]; +const localFilePath = 'gps/gps.txt' + +let cafTramTakArray = ["501", "502", "503", "504", "505", "506", "507", "508", "509", "510", "511", "512", "513", "514", "515", "516", "517", "518", "519", "520"]; +let pesaTramTakArray = ["521", "522", "523", "524", "525", "526", "527", "528", "529", "530", "531", "532"]; +let electricBusTakArray = ["1350", "1351", "1353", "1356", "1357", "2411", "2413", "2414", "2416"]; +let kt6tmTramArray = ["96", "97", "98", "99", "102", "103", "109", "110", "114", "123", "131", "148"]; +let kt4suTramArray = ["104"]; +let kt4tmrTramArray = ["136", "138", "140", "141", "142", "168"]; +let kt4dTramArray = ["157", "161", "170", "172", "173", "176", "177", "178", "179", "180"]; +let kt4tmTramArray = ["181", "182"]; let requestedType = "Unfetched"; let requestedLine = "Unfetched"; @@ -21,131 +30,227 @@ let requestedTak = "Unfetched"; let vehicleType = "Unfetched"; let requestedLatLong = "Unfetched"; -console.log("Server initalize!"); +let isRequestMode = false; +let requestModeIntervalId = null; +let lastFetchTime = 0; +const defaultFetchInterval = 120000; +const requestModeInterval = 30000; +const requestModeDuration = 120000; -app.use(express.static('client')) +console.log("Server initialized!"); + +app.use(express.static('client')); app.get('/tltmap', (req, res) => { - console.log("Requested / (index.html). Fetching!"); - //index.html - res.sendFile(__dirname + '/client/index.html'); + res.sendFile(path.join(__dirname, 'client/index.html')); }); app.get('/img/marker.png', (req, res) => { - var img = fs.readFileSync('./client/marker.png'); - res.writeHead(200, {'Content-Type': 'image/png'}); + const img = fs.readFileSync('./client/marker.png'); + res.writeHead(200, { 'Content-Type': 'image/png' }); res.end(img, 'binary'); }); server.listen(serverPort, () => { - console.log("Apache server initalized..."); + console.log("Apache server initialized..."); console.log('Server started on port', serverPort); - //triggerDataFetch(); }); io.on('connection', (socket) => { - socket.on('takSearch', (tak) => { - try { + socket.on('takSearch', async (tak) => { + try { console.log("Input tak: " + tak); - fetchData(tak, socket); - } catch { - + saveRequestLogs(socket, tak); + if (isRequestMode) { + const currentTime = Date.now(); + if (currentTime - lastFetchTime >= requestModeInterval) { + await fetchAndSaveData("Request Mode"); + } + } else { + await fetchAndSaveData("Request Mode"); + } + if (isRequestMode) { + clearInterval(requestModeIntervalId); + } + startRequestModeFetch(); + fetchDataFromLocalFile(tak, socket); + } catch (error) { + console.error("Error processing takSearch:", error); } }); }); -async function triggerConstantDataFetch() { - while (true) { - console.log("Fetching new data..."); - await fetchData(); - console.log("Data fetch completed. Wait 5 seconds before next fetch!"); +function saveRequestLogs(socket, takInput) { + const xForwardedFor = socket.request.headers['x-forwarded-for']; + let clientIp; + if (xForwardedFor) { + clientIp = xForwardedFor.split(',')[0].trim(); + } else { + clientIp = socket.request.connection.remoteAddress; + } + const date = new Date(); + const logData = `${clientIp} - [${date}] - [SEARCH ${takInput}] - ${socket.handshake.headers['user-agent']}\n`; + writeToLog('search_log.txt', logData); +} + +function writeToLog(logfile, logdata) { + var realLogFile = path.join('logs/', logfile); + fs.appendFile(realLogFile, logdata, 'utf8', (err) => { + if (err) { + console.error('Error writing to file:', err); + } + }); +} + +async function fetchAndSaveData(fetchMode) { + try { + console.log(`Fetch started (${fetchMode})`); + const date = new Date(); + const timestamp = date.toISOString().replace(/:/g, '_').replace('T', '-').split('.')[0]; + const logData = `${date} - Fetching new data (${fetchMode})...\n`; + writeToLog('fetch_log.txt', logData); + + if (fs.existsSync(localFilePath)) { + const oldFilePath = `gps/gps-${timestamp}.txt` + fs.renameSync(localFilePath, oldFilePath); + } + + const response = await axios.get(url); + if (response.status === 200) { + fs.writeFileSync(localFilePath, response.data, 'utf8'); + console.log("Fetch completed."); + const logData = `${date} - Fetching completed (${fetchMode})!\n`; + writeToLog('fetch_log.txt', logData); + } else { + const logData = `${date} - Fetching failed (${fetchMode}). Got: ${response.status}\n`; + writeToLog('errors_log.txt', logData); + } + lastFetchTime = Date.now(); + } catch (error) { + const date = new Date(); + const logData = `${date} - Error fetching data (${fetchMode}): ${error.message}\n`; + writeToLog('errors_log.txt', logData); } } -async function fetchData(takInput, socket) { - try { - const response = await axios.get(url); - if (response.status === 200) { - const lines = response.data.split('\n'); - let takFound = 0; - lines.forEach(line => { - if (line) { - const data = line.split(','); - if (data.length >= 9) { - try { - const transportType = parseInt(data[0]); - const lineNumber = parseInt(data[1]); - const longitude = parseInt(data[2]) / 1000000; - const latitude = parseInt(data[3]) / 1000000; - const tak = data[6]; - - let transportTypeDecoded; +function startPeriodicDataFetch() { + fetchAndSaveData("Normal Mode"); + setInterval(() => { + if (!isRequestMode) { + fetchAndSaveData("Normal Mode"); + } + }, defaultFetchInterval); +} - switch (transportType) { - case 1: - transportTypeDecoded = "TROLL"; - break; - case 2: - transportTypeDecoded = "BUS"; - break; - case 3: - transportTypeDecoded = "TRAM"; - break; - case 7: - transportTypeDecoded = "NIGHTBUS"; - break; - default: - transportTypeDecoded = "Unknown"; - break; - } - if (tak == takInput) { - if (transportTypeDecoded == "TRAM") { - if (cafTramTakArray.includes(tak)) { - vehicleType = "CAF Urbos (Spain) (Overhead 600V, Motor 264 kW) 70km/h TOP"; - } - else { - vehicleType = "-- INFO UNAVAIL. --"; - } - } - else { - vehicleType = "Unfetched"; - } - takFound = 1; - requestedType = transportTypeDecoded; - requestedLine = lineNumber; - requestedLat = latitude; - requestedLong = longitude; - requestedLatLong = String(latitude) + " " + String(longitude); - requestedTak = tak; - console.log("Requested data fetched:"); - console.log("Transport Type:", transportTypeDecoded); - console.log("Line Number:", lineNumber); - console.log("Latitude:", latitude); - console.log("Longitude:", longitude); - console.log("Merged coordinates:", requestedLatLong); - console.log("TAK:", tak); - console.log(); - socket.emit('takResults', requestedType, requestedLine, requestedLat, requestedLong, requestedTak, requestedLatLong, vehicleType); - } - else if (tak != takInput && takFound != 1) { - takFound = 0; - let busNotFoundText = "BUS NOT FOUND!"; - requestedType = busNotFoundText; - requestedLine = busNotFoundText; - requestedLat = busNotFoundText; - requestedLong = busNotFoundText; - requestedTak = busNotFoundText; - } - } catch (error) { - console.log("Invalid data format!", line); +function startRequestModeFetch() { + isRequestMode = true; + requestModeIntervalId = setInterval(async () => { + const currentTime = Date.now(); + if (currentTime - lastFetchTime >= requestModeInterval) { + await fetchAndSaveData("Request Mode"); + } + }, requestModeInterval); + setTimeout(() => { + clearInterval(requestModeIntervalId); + isRequestMode = false; + }, requestModeDuration); +} + +async function fetchDataFromLocalFile(takInput, socket) { + try { + const data = fs.readFileSync(localFilePath, 'utf8'); + const lines = data.split('\n'); + let takFound = 0; + lines.forEach(line => { + if (line) { + const data = line.split(','); + if (data.length >= 9) { + try { + const transportType = parseInt(data[0]); + const lineNumber = parseInt(data[1]); + const longitude = parseFloat(data[2]) / 1000000; + const latitude = parseFloat(data[3]) / 1000000; + const tak = data[6]; + + let transportTypeDecoded; + + switch (transportType) { + case 1: + transportTypeDecoded = "TROLL"; + break; + case 2: + transportTypeDecoded = "BUS"; + break; + case 3: + transportTypeDecoded = "TRAM"; + break; + case 7: + transportTypeDecoded = "NIGHTBUS"; + break; + default: + transportTypeDecoded = "Unknown"; + break; } + if (tak === takInput) { + if (transportTypeDecoded === "TRAM") { + if (cafTramTakArray.includes(tak)) { + vehicleType = "CAF Urbos AXL (Spain) (Overhead 600V, Motor 264 kW) 70km/h TOP"; + } else if (pesaTramTakArray.includes(tak)) { + vehicleType = "PESA Twist 147N"; + } else if (kt6tmTramArray.includes(tak)) { + vehicleType = "Tatra KT6 TM"; + } else if (kt4suTramArray.includes(tak)) { + vehicleType = "Tatra KT4 SU"; + } else if (kt4tmrTramArray.includes(tak)) { + vehicleType = "Tatra KT4 TMR"; + } else if (kt4dTramArray.includes(tak)) { + vehicleType = "Tatra KT4 D"; + } else if (kt4tmTramArray.includes(tak)) { + vehicleType = "Tatra KT4 TM"; + } else { + vehicleType = "-- Info unavailable --"; + } + } else if (transportTypeDecoded === "BUS") { + if (electricBusTakArray.includes(tak)) { + vehicleType = "Solaris Urbino IV 12 Electric"; + } + } else { + vehicleType = "-- Info unavailable --"; + } + takFound = 1; + requestedType = transportTypeDecoded; + requestedLine = lineNumber; + requestedLat = latitude; + requestedLong = longitude; + requestedLatLong = `${latitude} ${longitude}`; + requestedTak = tak; + console.log("Requested data fetched:"); + console.log("Transport Type:", transportTypeDecoded); + console.log("Line Number:", lineNumber); + console.log("Latitude:", latitude); + console.log("Longitude:", longitude); + console.log("Merged coordinates:", requestedLatLong); + console.log("TAK:", tak); + console.log(); + socket.emit('takResults', requestedType, requestedLine, requestedLat, requestedLong, requestedTak, requestedLatLong, vehicleType); + } else if (tak !== takInput && takFound !== 1) { + takFound = 0; + const busNotFoundText = "VEHICLE NOT FOUND!"; + requestedType = busNotFoundText; + requestedLine = busNotFoundText; + requestedLat = busNotFoundText; + requestedLong = busNotFoundText; + requestedTak = busNotFoundText; + } + } catch (error) { + console.log("Invalid data format!", line); } } - }); - } else { - console.log("Data fetch fail! Got status:", response.status); - } + } + }); } catch (error) { - console.error("Error fetching data:", error); + console.error("Error reading local file:", error); } -} \ No newline at end of file +} + +startPeriodicDataFetch(); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0c68d68..e4e08ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -247,9 +247,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", - "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -260,7 +260,7 @@ "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0" + "ws": "~8.17.1" }, "engines": { "node": ">=10.2.0" @@ -840,12 +840,12 @@ } }, "node_modules/socket.io-adapter": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz", - "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "dependencies": { "debug": "~4.3.4", - "ws": "~8.11.0" + "ws": "~8.17.1" } }, "node_modules/socket.io-adapter/node_modules/debug": { @@ -981,15 +981,15 @@ } }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -1182,9 +1182,9 @@ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "engine.io": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", - "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", "requires": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -1195,7 +1195,7 @@ "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0" + "ws": "~8.17.1" }, "dependencies": { "cookie": { @@ -1620,12 +1620,12 @@ } }, "socket.io-adapter": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz", - "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "requires": { "debug": "~4.3.4", - "ws": "~8.11.0" + "ws": "~8.17.1" }, "dependencies": { "debug": { @@ -1707,9 +1707,9 @@ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "requires": {} } } diff --git a/rollback b/rollback deleted file mode 100644 index 2b7f884..0000000 --- a/rollback +++ /dev/null @@ -1,285 +0,0 @@ -let serverPort = 3000; -const url = "http://transport.tallinn.ee/gps.txt"; - -const express = require('express'); -const { fstat } = require('fs'); -const app = express(); -const http = require('http'); -const server = http.createServer(app); -const { Server } = require("socket.io"); -const io = new Server(server); -const axios = require('axios'); -const fs = require('node:fs'); -var sleep = require('sleep'); - -console.log("Server initalize!"); - -app.get('/', (req, res) => { - console.log("Init root /"); - //index.html - res.sendFile(__dirname + '/client/index.html'); -}); - -server.listen(serverPort, () => { - console.log("Apache server initalized..."); - console.log('Server started on port', serverPort); - triggerDataFetch(); -}); - -io.on('takSearch', (socket) => { - -}); - -async function triggerDataFetch() { - while (true) { - console.log("Fetching new data..."); - await fetchData(); - console.log("Data fetch completed. Wait 5 seconds before next fetch!"); - await sleep.usleep(5000000); - } -} - -async function fetchData() { - try { - const response = await axios.get(url); - if (response.status === 200) { - const lines = response.data.split('\n'); - lines.forEach(line => { - if (line) { - const data = line.split(','); - if (data.length >= 9) { - try { - const transportType = parseInt(data[0]); - const lineNumber = parseInt(data[1]); - const longitude = parseInt(data[2]) / 1000000; - const latitude = parseInt(data[3]) / 1000000; - const tak = data[6]; - - let transportTypeDecoded; - switch (transportType) { - case 1: - transportTypeDecoded = "TROLL"; - break; - case 2: - transportTypeDecoded = "BUS"; - break; - case 3: - transportTypeDecoded = "TRAM"; - break; - default: - transportTypeDecoded = "Unknown"; - break; - } - console.log("Transport Type:", transportTypeDecoded); - console.log("Line Number:", lineNumber); - console.log("Latitude:", latitude); - console.log("Longitude:", longitude); - console.log("Decoded address:"); - console.log("TAK:", tak); - console.log(); - } catch (error) { - console.log("Invalid data format!", line); - } - } - } - }); - } else { - console.log("Data fetch fail! Got status:", response.status); - } - } catch (error) { - console.error("Error fetching data:", error); - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - Bus Location Finder - - - - -

Bus Location Finder

- - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -let serverPort = 3000; -const url = "http://transport.tallinn.ee/gps.txt"; - -const express = require('express'); -const { fstat } = require('fs'); -const app = express(); -const http = require('http'); -const server = http.createServer(app); -const { Server } = require("socket.io"); -const io = new Server(server); -const axios = require('axios'); -const fs = require('node:fs'); -var sleep = require('sleep'); - -console.log("Server initalize!"); - -app.get('/', (req, res) => { - console.log("Init root /"); - //index.html - res.sendFile(__dirname + '/client/index.html'); -}); - -server.listen(serverPort, () => { - console.log("Apache server initalized..."); - console.log('Server started on port', serverPort); - //triggerDataFetch(); -}); - -io.on('connection', (socket) => { - console.log("Got connection from user! Waiting for taksearch...") - socket.on('takSearch', (tak) => { - console.log(tak); - console.log(triggerDataFetch(tak)); - }); -}); - -function triggerDataFetch(tak) { - console.log("Fetching new data..."); - const data = fetchData(); - console.log("Data fetch completed."); - const filteredData = data.filter(item => item.tak === tak); - return filteredData; - //await io.emit('takSearch', filteredData); - // this part is only for when it is continuous - //console.log("Data fetch completed. Wait 5 seconds before next fetch!"); - //await sleep.usleep(5000000); - // also add while true cycle -} - -function fetchData() { - try { - const response = axios.get(url); - if (response.status == 200) { - const lines = response.data.split('\n'); - const result = []; - lines.forEach(line => { - if (line) { - const data = line.split(','); - if (data.length >= 9) { - try { - const transportType = parseInt(data[0]); - const lineNumber = parseInt(data[1]); - const longitude = parseInt(data[2]) / 1000000; - const latitude = parseInt(data[3]) / 1000000; - const tak = data[6]; - - let transportTypeDecoded; - switch (transportType) { - case 1: - transportTypeDecoded = "TROLL"; - break; - case 2: - transportTypeDecoded = "BUS"; - break; - case 3: - transportTypeDecoded = "TRAM"; - break; - default: - transportTypeDecoded = "Unknown"; - break; - } - - result.push({ - transportType: transportTypeDecoded, - lineNumber, - longitude, - latitude, - tak - }); - } catch (error) { - console.log("Invalid data format!", line); - } - } - } - }); - return result; - } else { - console.log("Data fetch fail! Got status:", response.status); - return []; - } - } catch (error) { - console.error("Error fetching data:", error); - return []; - } -} \ No newline at end of file diff --git a/tltmapout.txt b/tltmapout.txt deleted file mode 100644 index 01d2554..0000000 --- a/tltmapout.txt +++ /dev/null @@ -1,8 +0,0 @@ -get url transport.tallinn.ee/gps.txt -3,2,24786250,59429980,,302,98,Z,146 -a,b,c,d,,f,g -a= 3: tram ; 2=bus ; 1: troll -b= line -c= long -d= lat -g= TAK \ No newline at end of file