fix: disable compass when resetting north

This commit is contained in:
2026-07-23 02:32:47 +01:00
parent 623838c861
commit 9449bf9b93
+20 -5
View File
@@ -117,11 +117,7 @@ const map = new ol.Map({
createVisibleLayersExtentControl(), createVisibleLayersExtentControl(),
createAreaZoomControl(), createAreaZoomControl(),
...(shouldShowDeviceCompassControl() ? [createDeviceCompassControl()] : []), ...(shouldShowDeviceCompassControl() ? [createDeviceCompassControl()] : []),
new ol.control.Rotate({ createNorthPointerControl(),
autoHide: true,
label: createNorthPointerIcon(),
tipLabel: "Reset map orientation to north",
}),
]), ]),
layers: [ layers: [
softBasemapLayer, softBasemapLayer,
@@ -201,6 +197,25 @@ function createNorthPointerIcon() {
return icon; return icon;
} }
function createNorthPointerControl() {
const control = new ol.control.Rotate({
autoHide: true,
label: createNorthPointerIcon(),
tipLabel: "Reset map orientation to north",
});
// Resetting the view while compass orientation remains subscribed lets the
// next device event rotate it again. Stop the subscription when the north
// pointer is used so its reset remains in effect.
control.element.querySelector("button").addEventListener("click", () => {
if (deviceCompassActive) {
stopDeviceCompass();
}
});
return control;
}
function createVisibleLayersExtentControl() { function createVisibleLayersExtentControl() {
const element = document.createElement("div"); const element = document.createElement("div");
element.className = "ol-visible-layers-extent ol-unselectable ol-control"; element.className = "ol-visible-layers-extent ol-unselectable ol-control";