-
Notifications
You must be signed in to change notification settings - Fork 2
/
main.js
118 lines (112 loc) · 3.62 KB
/
main.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import {
createWindPolygon,
loadData,
getPeopleInPolygon,
oldPersonIcon,
youngPersonIcon,
alarmIcon,
} from "./lib.js";
var map = L.map("map").setView([46.94863, 7.45164], 16);
L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
maxZoom: 19,
attribution:
'© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
}).addTo(map);
const data = loadData();
let clickOrigin;
let originMarker;
let clickWind;
let windMarker;
let windVector;
let markerGroup;
const MAXHOURS = 5;
let hour = 0;
let polygon;
updateTextnode();
map.on("click", (e) => {
if (clickOrigin && clickWind) {
clickOrigin = undefined;
clickWind = undefined;
map.removeLayer(originMarker);
map.removeLayer(windMarker);
map.removeLayer(windVector);
map.removeLayer(markerGroup);
return;
}
if (clickOrigin) {
clickWind = e.latlng;
windMarker = L.marker(clickWind, { icon: alarmIcon }).addTo(map);
triggerCloudCalculation();
return;
}
clickOrigin = e.latlng;
originMarker = L.marker(clickOrigin, { icon: alarmIcon }).addTo(map);
});
function triggerCloudCalculation() {
windVector = L.polyline([clickOrigin, clickWind], { color: "red" }).addTo(
map
);
hour = 0;
const intervall = setInterval(() => {
const originKoords = [originMarker._latlng.lat, originMarker._latlng.lng];
const windKoords = [windMarker._latlng.lat, windMarker._latlng.lng];
if (polygon) map.removeLayer(polygon);
const windPolygon = createWindPolygon(originKoords, windKoords, hour);
polygon = L.polygon(windPolygon, {
color: "yellow",
}).addTo(map);
const people = getPeopleInPolygon(windPolygon, data);
console.log(people);
const markers = [];
const oldPeople = people.filter((p) => p.Alter >= 75);
oldPeople.forEach((person) => {
markers.push(
L.marker(L.latLng(...person.position), { icon: oldPersonIcon })
);
});
const youngPeople = people.filter((p) => p.Alter <= 10);
youngPeople.forEach((person) => {
markers.push(
L.marker(L.latLng(...person.position), { icon: youngPersonIcon })
);
});
updateTextnode(people, oldPeople, youngPeople);
markerGroup = L.featureGroup(markers).addTo(map);
hour += 1;
if (hour > MAXHOURS) clearInterval(intervall);
}, 1000);
}
function updateTextnode(noPeople, noOldPeople, noYoungPeople) {
document.getElementById("alarm").textContent =
windVector !== undefined
? `Alarm bei Koordinaten ${clickOrigin}`
: "Kein Alarm ausgelöst. Starten sie einen Alarm!";
document.getElementById("noPeople").textContent =
noPeople === undefined
? "Keine Personen betroffen"
: `${noPeople.length} Personen betroffen`;
document.getElementById("oldPeople").textContent =
noOldPeople === undefined
? "Keine Personen > 75 Jahre betroffen"
: `${noOldPeople.length} Personen betroffen`;
document.getElementById("youngPeople").textContent =
noYoungPeople === undefined
? "Keine Personen < 10 Jahren betroffen"
: `${noYoungPeople.length} Personen < 10 Jahren betroffen`;
}
/*
const rathaus = [46.94866, 7.45144];
const wind = [46.94806, 7.45004];
originMarker = L.marker(rathaus).addTo(map);
windVector = L.polyline([rathaus, wind], { color: "red" }).addTo(map);
windMarker = L.marker(wind).addTo(map);
const intervall = setInterval(() => {
if (polygon) map.removeLayer(polygon);
polygon = L.polygon(createWindPolygon(rathaus, wind, hour), {
color: "yellow",
}).addTo(map);
hour += 1;
if (hour > MAXHOURS) clearInterval(intervall);
}, 1000);
//L.polygon(createWindPolygon(rathaus, wind, 3), { color: "yellow" }).addTo(map);
*/