From 124c6fe4ded8e7964847bcfbb5d431aabbca5c35 Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@nibio.no>
Date: Thu, 16 Nov 2023 12:27:33 +0100
Subject: [PATCH] Remember zoom and pan between browser sessions

---
 spatial/static/spatial/js/gridmap.js | 43 +++++++++++++++++++++++-----
 1 file changed, 36 insertions(+), 7 deletions(-)

diff --git a/spatial/static/spatial/js/gridmap.js b/spatial/static/spatial/js/gridmap.js
index 10fb6a76..2f0fadf4 100644
--- a/spatial/static/spatial/js/gridmap.js
+++ b/spatial/static/spatial/js/gridmap.js
@@ -193,13 +193,30 @@ msLoadMap(): Unable to access file. (/disks/data01/mapserver/wms/SEPTREFFUM/SEPT
     setCurrentDate(todayLayerIndex);
     switchLayer(todayLayerIndex);
 
-    // Zoom and center the map to fit to the extent of the WMS layer. 
-    // If the current WMS layer has a lot of no-data / invisible values surrounding the 
-    // visible values, the zoom might appear to be a bit too far out
-    let currentWMSLayer = WMSLayersDateBucket[currentTimestamp][currentParameter]
-    let WMSExtent = currentWMSLayer.EX_GeographicBoundingBox; 
-    let extent = ol.proj.transformExtent(WMSExtent, getCurrentVisibleOLLayer().getSource().getProjection().getCode(), map.getView().getProjection());
-    map.getView().fit(extent, map.getSize());
+    var storedMapSettings = getLocalSettings([
+        "gridmap.longitude",
+        "gridmap.latitude",
+        "gridmap.zoomLevel"], 
+        true);
+    if(storedMapSettings != null)
+    {
+        longitude = parseFloat(storedMapSettings["gridmap.longitude"]);
+        latitude = parseFloat(storedMapSettings["gridmap.latitude"]);
+        let lonLat=[longitude,latitude];
+        zoomLevel = parseInt(storedMapSettings["gridmap.zoomLevel"]);
+        map.getView().setCenter(ol.proj.transform(lonLat, 'EPSG:4326', map.getView().getProjection().getCode()));
+        map.getView().setZoom(zoomLevel);
+    }
+    else
+    {
+        // Zoom and center the map to fit to the extent of the WMS layer. 
+        // If the current WMS layer has a lot of no-data / invisible values surrounding the 
+        // visible values, the zoom might appear to be a bit too far out
+        let currentWMSLayer = WMSLayersDateBucket[currentTimestamp][currentParameter]
+        let WMSExtent = currentWMSLayer.EX_GeographicBoundingBox; 
+        let extent = ol.proj.transformExtent(WMSExtent, getCurrentVisibleOLLayer().getSource().getProjection().getCode(), map.getView().getProjection());
+        map.getView().fit(extent, map.getSize());
+    }
 
     popup = new ol.Overlay({
     element: document.getElementById('popup')
@@ -208,6 +225,17 @@ msLoadMap(): Unable to access file. (/disks/data01/mapserver/wms/SEPTREFFUM/SEPT
 
     map.on('singleclick', displayQueryResult);
 
+    map.on('moveend', function(evt) {
+		// Store map settings
+		var centerCoordinate = ol.proj.transform(map.getView().getCenter(), map.getView().getProjection().getCode(),'EPSG:4326');
+		var settings = {
+			"gridmap.longitude": centerCoordinate[0],
+			"gridmap.latitude": centerCoordinate[1],
+			"gridmap.zoomLevel": map.getView().getZoom()
+		};
+		storeLocalSettings(settings);
+		});
+
     // Add the parameter selector
     let radioHTML = "";
     for(let i=0;i<parameters.length;i++)
@@ -250,6 +278,7 @@ async function displayQueryResult(evt)
 
         let response = await fetch(url);
         let responseXML = await response.text();
+        console.info(responseXML);
         // User clicked outside of layer extent
         if(responseXML.trim().length == 0)
         {
-- 
GitLab