aboutsummaryrefslogtreecommitdiff
path: root/modern/src/map
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2022-07-02 10:48:11 -0700
committerAnton Tananaev <anton@traccar.org>2022-07-02 10:48:11 -0700
commit4ccdf309eb6d3c899c629911a3b7df4842e3f35d (patch)
treea3ecd2d0b81f318e6e43290844d55f361d48c458 /modern/src/map
parentfd83ca07e5544a1d7b4a91e4c5f68a7f5f2189a6 (diff)
downloadtrackermap-web-4ccdf309eb6d3c899c629911a3b7df4842e3f35d.tar.gz
trackermap-web-4ccdf309eb6d3c899c629911a3b7df4842e3f35d.tar.bz2
trackermap-web-4ccdf309eb6d3c899c629911a3b7df4842e3f35d.zip
Add map scale control
Diffstat (limited to 'modern/src/map')
-rw-r--r--modern/src/map/MapScale.js34
-rw-r--r--modern/src/map/core/MapView.js1
2 files changed, 35 insertions, 0 deletions
diff --git a/modern/src/map/MapScale.js b/modern/src/map/MapScale.js
new file mode 100644
index 00000000..c8a724c9
--- /dev/null
+++ b/modern/src/map/MapScale.js
@@ -0,0 +1,34 @@
+import maplibregl from 'maplibre-gl';
+import { useEffect, useMemo } from 'react';
+import { useAttributePreference } from '../common/util/preferences';
+import { map } from './core/MapView';
+
+const MapScale = () => {
+ const distanceUnit = useAttributePreference('distanceUnit');
+
+ const control = useMemo(() => new maplibregl.ScaleControl(), []);
+
+ useEffect(() => {
+ map.addControl(control, 'bottom-right');
+ return () => map.removeControl(control);
+ }, [control]);
+
+ useEffect(() => {
+ switch (distanceUnit) {
+ case 'mi':
+ control.setUnit('imperial');
+ break;
+ case 'nmi':
+ control.setUnit('nautical');
+ break;
+ case 'km':
+ default:
+ control.setUnit('metric');
+ break;
+ }
+ }, [control, distanceUnit]);
+
+ return null;
+};
+
+export default MapScale;
diff --git a/modern/src/map/core/MapView.js b/modern/src/map/core/MapView.js
index 98865157..068769d9 100644
--- a/modern/src/map/core/MapView.js
+++ b/modern/src/map/core/MapView.js
@@ -17,6 +17,7 @@ element.style.boxSizing = 'initial';
export const map = new maplibregl.Map({
container: element,
+ attributionControl: false,
});
let ready = false;