I have an existing map on a page. I can select that element using something along the lines of document.getElementById() to get the HTMLElement javascript object. Is it possible
You can get google.maps.Map
object from DOM Element
, with a slight trick.
When you initialize map object, you need to store the object on element's data attribute.
Example:
$.fn.googleMap = function (options) {
var _this = this;
var settings = $.extend({}, {
zoom: 5,
centerLat: 0,
centerLon: 0
}, options);
this.initialize = function () {
var mapOptions = {
zoom: settings.zoom
};
var map = new google.maps.Map(_this.get(0), mapOptions);
// do anything with your map object here,
// eg: centering map, adding markers' events
/********************************************
* This is the trick!
* set map object to element's data attribute
********************************************/
_this.data('map', map);
return _this;
};
// ... more methods
return this;
};
After you define a map element, eg:
var mapCanvas = $('#map-canvas');
var map = mapCanvas.googleMap({
zoom: 5,
centerLat: 0,
centerLong: 0
});
// ... add some pre-load initiation here, eg: add some markers
// then initialize map
map.initialize();
you can then get the map object later on by using element's ID, eg:
var mapCanvas = $('#map-canvas');
$('.location').on('click', function () {
// google map takes time to load, so it's better to get
// the data after map is rendered completely
var map = mapCanvas.data("map");
if (map) {
map.panTo(new google.maps.LatLng(
$(this).data('latitude'),
$(this).data('longitude')
));
}
});
By using this method, you can have multiple maps with different behaviors on a page.