You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PackageHelper/www/assets/js/map_leaflet.js

136 lines
4.2 KiB
JavaScript

/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
function leafletMap() {
var map = L.map('mapbox', {
zoomSnap: 0.25,
minZoom: 1,
maxZoom: 19,
zoom: 12,
center: L.latLng(46.5966, -112.0180),
attributionControl: false
});
map.maptype = "leaflet";
if (getStorage("mapsource") == null) {
setStorage("mapsource", "liberty");
}
$("#mapbox").css("background-color", SETTINGS.maptileurls[getStorage("mapsource")].bgcolor);
L.tileLayer(SETTINGS.maptileurls[getStorage("mapsource")].url, {
minZoom: 1,
maxZoom: 19
}).addTo(map);
map.locateControl = L.control.locate({
flyTo: false, // Hopefully this will lower the number of map tile requests when location is found
showPopup: false,
locateOptions: {
enableHighAccuracy: true,
maxZoom: getStorage("trackzoom") == null ? 16 : getStorage("trackzoom") * 1
},
setView: "untilPanOrZoom",
icon: "far fa-compass",
iconLoading: "far fa-compass fa-spin"
}).addTo(map);
map.packagelayer = L.markerClusterGroup();
map.packagelayer.addTo(map);
map.setView({lat: userPosition.coords.latitude, lng: userPosition.coords.longitude}, 2);
map.startLocateControl = function () {
map.locateControl.start();
}
map.stopLocateControl = function () {
}
map.setMapHeading = function (heading) {
}
map.setMapLocation = function (latitude, longitude) {
map.setView({
lng: longitude,
lat: latitude
});
}
map.openedPanelIconID = null;
map.updatePackageLayer = function (data) {
map.packagelayer.clearLayers();
//console.log(data);
for (var i = 0; i < data.length; i++) {
// JavaScript variable scope and anonymous functions are dumb
// This is necessary, otherwise all the on(click)s will fire for the last iteration
// of the loop, or something like that
(function (datai) {
var iconName = getMapIconForItems(datai.items);
//console.log(iconName);
var classes = "package-marker package-marker-leaflet hapticbtn";
// Prevent selection highlight from going away after map refresh
if (map.openedPanelIconID != null && map.openedPanelIconID == datai.id) {
classes += " selected";
}
// Show different color highlight when nearby and undelivered
if (packages[i].distance * 1 < getStorage("alertradius") * 1
&& getUndeliveredCount(packages[i]) > 0) {
classes += " alerted";
}
var icon = L.icon({
iconUrl: "assets/images/" + iconName + ".png",
iconSize: [25, 25],
iconAnchor: [12.5, 12.5],
className: classes
});
var marker = L.marker(
[
datai.coords[0],
datai.coords[1]
],
{
icon: icon,
})
.on("click", function () {
marker._icon.id = "marker-" + datai.id;
openPackageInfoSheet(datai.id);
});
map.packagelayer.addLayer(marker);
//L.DomUtil.addClass(marker._icon, 'package-marker'); // enable selected CSS to work correctly
})(data[i]);
}
}
map.animateMapIn = function (latitude, longitude, zoom, heading) {
if (typeof zoom == 'undefined') {
zoom = 14;
}
if (typeof heading == 'undefined') {
heading = 0;
}
map.flyTo([latitude, longitude], zoom);
// Set min zoom after some time to fly in
setTimeout(function () {
map.setMinZoom(12);
map.setZoom(zoom);
}, 1000);
}
return map;
}