6

Is there a way in Openlayers 3 to get the map that is attached to a specific html element?

Something like:

var map = new ol.Map({
  view: new ol.View({
    center: [0, 0],
    zoom: 1
  }),
  layers: [
    new ol.layer.Tile({
      source: new ol.source.MapQuest({layer: 'osm'})
    })
  ],
  target: 'map'
});

//Later on, in a different file
var myMap = $("#map").ol.Map()
Wouter van Nifterick
  • 23,603
  • 7
  • 78
  • 122
Tyler DeWitt
  • 23,366
  • 38
  • 119
  • 196

2 Answers2

8

The map object has a reference to the HTML element but the HTML element does not have a reference to the map object. The HTML element does not know about the map object at all.

If you use jQuery you could possibly store a reference to the map in the jQuery object using the data method. For example:

var map = new ol.Map({
  target: 'map', 
  //... 
});
$('#map').data('map', map);

And then, to get a reference to the map from the element:

var map = $('#map').data('map');
erilem
  • 2,634
  • 21
  • 21
  • 1
    For use without jQuery: `document.getElementById("map").data = map;` and `var map = document.getElementById("map").data;` – bennos Sep 26 '18 at 19:57
3

For clarity, here is another example demonstrating erilem's answer with a map var and map div that are not named 'map'.

mapElement = '#mapDiv'
mymap = new ol.Map({        
  target: mapDiv,
  view: new ol.View({
     ...
  })
});
$(mapElement).data('map', mymap);

Then you can reference that map with jquery using data with the data method. In my case I then wanted to use the ol updateSize() to update mymap.

thisMap = $(mapElement).data('map')
thisMap.updateSize();

This is useful when I have more than one map on a page. Where I use:

mapDiv = id +'-map'      
mapElement = '#' + mapDiv
maps[i] = new ol.Map({        
    target: mapDiv,
    view: new ol.View({
        ...
    })
});
$(mapElement).data('map', maps[i])

And then:

thisMapId = activeDataset + '-map'
thisMapElement = '#' + thisMapId
thisMap = $(thisMapElement).data('map')
thisMap.updateSize()

Where id = activeDataset

jenseva
  • 31
  • 1