"use strict"; // Import leaflet, but some plugins require it to have the variable name 'L' :-/ import L from 'leaflet'; import 'leaflet-fullscreen'; import 'leaflet-easyprint'; // import '../../node_modules/leaflet-timedimension/dist/leaflet.timedimension.src.withlog.js'; import Config from './Config.mjs'; import LayerDeviceMarkers from './LayerDeviceMarkers.mjs'; import DeviceData from './DeviceData.mjs'; import ReadingsData from './ReadingsData.mjs'; import UI from './UI.mjs'; class MapManager { constructor() { console.log(Config); this.readings_data = new ReadingsData(); } async setup() { // Create the map this.map = L.map("map", { fullscreenControl: true }); this.map.setView(Config.default_location, Config.default_zoom); // Add the OpenStreetMap tile layer this.layer_openstreet = L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { id: "openstreetmap", maxZoom: 19, attribution: "© OpenStreetMap contributors" }).addTo(this.map); // Add the attribution this.map.attributionControl.addAttribution("Data: Connected Humber"); this.map.attributionControl.addAttribution("Air Quality Web by Starbeamrainbowlabs"); this.map.attributionControl.addAttribution("Sensor Data Disclaimer"); // Setup the UI this.ui = new UI(Config, this); this.ui.setup().then(() => console.log("[map] UI setup complete.")); // Set the export to image button this.setup_print_export(); // Load the device information this.device_data = new DeviceData(); await this.device_data.setup(); console.log("[map] Device data loaded"); // Add the device markers console.info("[map] Loading device markers...."); Promise.all([ this.setup_device_markers.bind(this)() .then(() => console.info("[map] Device markers loaded successfully.")), ]).then(() => document.querySelector("main").classList.remove("working-visual")); } // NOTE: We tried leaflet-time-dimension for changing the time displayed, but it didn't work out async setup_device_markers() { this.device_markers = new LayerDeviceMarkers(this, this.device_data); await this.device_markers.setup(); } setup_print_export() { L.easyPrint({ title: "Export as image", position: "topleft", exportOnly: true, sizeModes: [ "A4Portrait", "A4Landscape", "Current", { width: 3308, height: 2339, name: "HiRes Landscape", className: 'HiResLandscape', tooltip: 'HiRes Landscape' } ], defaultSizeTitles: { Current: 'Current Size', A4Landscape: 'A4 Landscape', A4Portrait: 'A4 Portrait', HiResLandscape: 'HiRes Landscape' } }).addTo(this.map); } setup_layer_control() { this.layer_control = L.control.layers({ // Base layer(s) "OpenStreetMap": this.layer_openstreet }, { // Overlay(s) "Devices": this.device_markers.layer, // "Heatmap": this.overlay.layer }, { // Options }); this.layer_control.addTo(this.map); } } export default MapManager;