traque/static/utils.js

143 lines
4.2 KiB
JavaScript
Raw Normal View History

2024-05-22 15:54:49 +02:00
var evtsource;
var markers = [];
var CircleIcon = L.Icon.extend({
options: {
iconSize: [20, 20],
iconAnchor: [10, 10],
popupAnchor: [0, 0]
}
});
2023-09-06 18:00:41 +02:00
var SelfIcon = L.Icon.extend({
options: {
iconSize: [20, 30],
iconAnchor: [10, 15],
popupAnchor: [0, 0]
}
});
2022-09-14 10:52:29 +02:00
var icons = [
2023-09-11 17:44:18 +02:00
new CircleIcon({ iconUrl: '/icons/0.png' }),
new CircleIcon({ iconUrl: '/icons/1.png' }),
new CircleIcon({ iconUrl: '/icons/2.png' }),
new CircleIcon({ iconUrl: '/icons/3.png' }),
new CircleIcon({ iconUrl: '/icons/4.png' }),
new CircleIcon({ iconUrl: '/icons/5.png' }),
new CircleIcon({ iconUrl: '/icons/6.png' }),
new CircleIcon({ iconUrl: '/icons/7.png' }),
new CircleIcon({ iconUrl: '/icons/8.png' }),
new CircleIcon({ iconUrl: '/icons/9.png' }),
new CircleIcon({ iconUrl: '/icons/10.png' }),
new CircleIcon({ iconUrl: '/icons/11.png' }),
2022-09-14 10:52:29 +02:00
];
2023-09-06 18:00:41 +02:00
var self_icons = [
2023-09-11 17:44:18 +02:00
new SelfIcon({ iconUrl: '/icons/self_0.png' }),
new SelfIcon({ iconUrl: '/icons/self_1.png' }),
new SelfIcon({ iconUrl: '/icons/self_2.png' }),
new SelfIcon({ iconUrl: '/icons/self_3.png' }),
new SelfIcon({ iconUrl: '/icons/self_4.png' }),
new SelfIcon({ iconUrl: '/icons/self_5.png' }),
new SelfIcon({ iconUrl: '/icons/self_6.png' }),
new SelfIcon({ iconUrl: '/icons/self_7.png' }),
new SelfIcon({ iconUrl: '/icons/self_8.png' }),
new SelfIcon({ iconUrl: '/icons/self_9.png' }),
new SelfIcon({ iconUrl: '/icons/self_10.png' }),
new SelfIcon({ iconUrl: '/icons/self_11.png' }),
2023-09-06 18:00:41 +02:00
];
2022-09-14 10:52:29 +02:00
//////////////////////////////////////////////////////////////////////////////
// INIT MAP
2022-09-14 14:09:06 +02:00
var map_border = [
[48.838991, 2.389310],
[48.865471, 2.356133],
[48.867714, 2.313811],
[48.841481, 2.307930],
[48.827912, 2.326842],
[48.821826, 2.358638],
[48.838991, 2.389310]
];
2022-09-14 10:52:29 +02:00
var map;
function setup_map(){
2024-05-22 15:54:49 +02:00
map = L.map('map').setView([48.8448, 2.3550], 13);
2022-09-14 10:52:29 +02:00
2024-05-22 15:54:49 +02:00
L.tileLayer('https://tiles.stadiamaps.com/tiles/stamen_toner/{z}/{x}/{y}{r}.{ext}', {
maxZoom: 20,
minZoom: 0,
attribution: '&copy; <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a> &copy; <a href="https://www.stamen.com/" target="_blank">Stamen Design</a> &copy; <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> &copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
ext: 'png'
}).addTo(map);
2022-09-14 14:09:06 +02:00
2024-05-22 15:54:49 +02:00
L.polyline(map_border, {color: 'red'}).addTo(map);
2022-09-14 10:52:29 +02:00
}
//////////////////////////////////////////////////////////////////////////////
2024-05-22 15:54:49 +02:00
// EVENT LISTENNING
function setup_evtlisten_common(){
evtSource.addEventListener("coords", (event) => {
const data = JSON.parse(event.data);
console.log(data);
var i = 0;
for (tracked of data) {
if (i == markers.length) {
markers.push(L.marker([0,0], {"icon": icons[0] }).addTo(map));
markers[i].bindPopup("");
}
markers[i].setLatLng(tracked.pos);
markers[i].setPopupContent(tracked.name);
if (tracked.me) {
markers[i].setIcon(self_icons[tracked.color]);
markers[i].setZIndexOffset(1000);
} else {
markers[i].setIcon(icons[tracked.color]);
markers[i].setZIndexOffset(0);
}
++i;
}
for (; i < markers.length; ++i) {
markers[i].setLatLng([0,0]);
}
});
//socket.on("popup", function(data){
// alert(data.content);
//});
//socket.on("remove", function(data){
// if(data.id in markers)
// markers[data.id].remove();
//});
//socket.on("newTracker", function(data){
// L.marker(data.position, {"icon": icons[1]}).addTo(map);
//});
2022-09-14 10:52:29 +02:00
}
//////////////////////////////////////////////////////////////////////////////
// GEOLOCALISATION
function setup_geoLoc(){
2024-05-22 15:54:49 +02:00
const requestOptions = { method: 'PUT' };
function geoLoc_success(pos) {
fetch("/log/"+id+"?lat="+pos.coords.latitude+"&long="+pos.coords.longitude, requestOptions);
}
2022-09-14 10:52:29 +02:00
2024-05-22 15:54:49 +02:00
function geoLoc_error(err) {
console.error(`ERROR(${err.code}): ${err.message}`);
}
2022-09-14 10:52:29 +02:00
2024-05-22 15:54:49 +02:00
var options = {
enableHighAccuracy: false,
timeout: 5000,
maximumAge: 0
};
2022-09-14 10:52:29 +02:00
2024-05-22 15:54:49 +02:00
navigator.geolocation.watchPosition(geoLoc_success, geoLoc_error, options);
2022-09-14 14:09:06 +02:00
}