diff --git a/js/src/table/gis_visualization.js b/js/src/table/gis_visualization.js index 3b007c30a2..b89c1d70f3 100644 --- a/js/src/table/gis_visualization.js +++ b/js/src/table/gis_visualization.js @@ -21,6 +21,8 @@ var scale = defaultScale; /** @type {SVGElement|undefined} */ var gisSvg; +/** @type {ol.Map|undefined} */ +var map; /** * Zooms and pans the visualization. @@ -129,16 +131,14 @@ function initGISVisualization () { zoomAndPan(); } -function drawOpenLayerMap (openLayerCreate) { +function drawOpenLayerMap () { $('#placeholder').hide(); $('#openlayersmap').show(); // Function doesn't work properly if #openlayersmap is hidden - if (!openLayerCreate) { + if (typeof map !== 'object') { // Draws openStreetMap with openLayers - drawOpenLayers(); - return 1; + map = drawOpenLayers(); } - return 0; } function getRelativeCoords (e) { @@ -200,18 +200,21 @@ AJAX.registerTeardown('table/gis_visualization.js', function () { onGisMouseWheel, PASSIVE_EVENT_LISTENERS ? { passive: false } : undefined ); + if (map) { + // Removes ol.Map's resize listener from window + map.setTarget(null); + map = undefined; + } }); AJAX.registerOnload('table/gis_visualization.js', function () { - var openLayerCreate = 0; - // If we are in GIS visualization, initialize it if ($('#gis_div').length > 0) { initGISVisualization(); } if ($('#choice').prop('checked') === true) { - openLayerCreate = drawOpenLayerMap(openLayerCreate); + drawOpenLayerMap(); } if (typeof ol === 'undefined') { @@ -223,7 +226,7 @@ AJAX.registerOnload('table/gis_visualization.js', function () { $('#placeholder').show(); $('#openlayersmap').hide(); } else { - openLayerCreate = drawOpenLayerMap(openLayerCreate); + drawOpenLayerMap(); } }); diff --git a/libraries/classes/Gis/GisVisualization.php b/libraries/classes/Gis/GisVisualization.php index 2dea3c46f7..5cf856ddf3 100644 --- a/libraries/classes/Gis/GisVisualization.php +++ b/libraries/classes/Gis/GisVisualization.php @@ -485,7 +485,8 @@ class GisVisualization { $this->init(); $scale_data = $this->scaleDataSet($this->data); - $output = 'if (typeof ol !== "undefined") {' + $output = 'function drawOpenLayers() {' + . 'if (typeof ol !== "undefined") {' . 'var olCss = "js/vendor/openlayers/theme/ol.css";' . '$(\'head\').append(\'\');' . 'var vectorLayer = new ol.source.Vector({});' @@ -510,6 +511,9 @@ class GisVisualization . 'new ol.control.Attribution]' . '});'; $output .= $this->prepareDataSet($this->data, $scale_data, 'ol', '') + . 'return map;' + . '}' + . 'return undefined;' . '}'; return $output; diff --git a/templates/table/gis_visualization/gis_visualization.twig b/templates/table/gis_visualization/gis_visualization.twig index 34f92e0dc6..9ec6241cad 100644 --- a/templates/table/gis_visualization/gis_visualization.twig +++ b/templates/table/gis_visualization/gis_visualization.twig @@ -71,10 +71,7 @@