Witam, robię stronę, która pokazuje pojazdy komunikacji miejskiej o danym numerze, jest kilka pojazdów jednej linii i chciałbym odświeżać ich pozycje na mapie, po wybraniu numeru wybieram pojazdy o danym numerze, jednak nie wiem jak zrobić znacznik dla każdego pojazdu o danym numerze, myślę, że ten kod powinien być w funkcji foreach, bo odpowiada on za tworzenie znacznika o danych współrzędnych:
const lat = vehicles["Vehicles"][line]["Lat"];
const lon = vehicles["Vehicles"][line]["Lon"];
marker.setLatLng([lat, lon]);
mymap.setView([lat, lon], 12)
dane pobierane są stąd: https://ckan2.multimediagdansk.pl/gpsPositions?
jest kilka pojazdów jednej linii, unikalna właściwość to VehicleCode, jednak jak podstawiam ją zamiast line to strona mi nie działa, wyskakuje mi: index2.html:126 Uncaught (in promise) TypeError: Cannot read property 'Lat' of undefined
at getISS (index2.html:126)
oto cały kod:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.6.0/dist/leaflet.css"
integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
crossorigin="" />
<script src="https://unpkg.com/leaflet@1.6.0/dist/leaflet.js"
integrity="sha512-gZwIG9x3wUXg2hdXF6+rVkLF/0Vi9U8D2Ntg4Ga5I5BZpVkVxlJWbSQtXPSiUTtC0TjtGOmxa1AJPuV0CPthew=="
crossorigin=""></script>
<style>
#mapid {
height: 720px;
}
</style>
<title>Document</title>
</head>
<body>
<button type="button">Wybierz linie</button>
<div id="mapid"></div>
<script>
const mymap = L.map('mapid').setView([54.352024, 18.646639], 12);
const marker = L.marker([54.352024, 18.646639]).addTo(mymap);
const attribution =
'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors';
const tileUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
const tiles = L.tileLayer(tileUrl, { attribution });
tiles.addTo(mymap);
const api_url = "https://ckan2.multimediagdansk.pl/gpsPositions?";
let start;
function chooseLine() {
async function getISS() {
const response = await fetch(api_url);
const vehicles = await response.json();
let result = vehicles["Vehicles"].filter(obj => {
return obj.Line === line
})
console.log(result)
const lat = vehicles["Vehicles"][line]["Lat"];
const lon = vehicles["Vehicles"][line]["Lon"];
marker.setLatLng([lat, lon]);
mymap.setView([lat, lon], 12)
}
const line = prompt('wybierz linie');
clearInterval(start);
start = setInterval(getISS, 1000);
}
const el = document.querySelector("button");
el.addEventListener("click", chooseLine);
</script>
</body>
</html>