Dancer
Dancer

Reputation: 17651

Google Maps - Map reload

I have the following code setup to apply a map for a variety of areas

var locations = [
  ['Liver Office - Liverpool Office', 53.40529, -2.988801, 1],
  ['Lond office - London Office', 51.515026, -0.086811, 2],

];
function plotMap(loc) {  

var mapOptions = {
    zoom: 17,
    center: new google.maps.LatLng((locations[loc][1]), (locations[loc][2])),
    stylers: [
    { saturation: -100 } // <-- THIS
  ]
};

var map = new google.maps.Map(document.getElementById('map'),

  mapOptions);

var marker = new google.maps.Marker({
    position: map.getCenter(),
    map: map,
     mapTypeControlOptions: {
     mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'tehgrayz']
    },
    icon: 'marketICO.png',
    title: (locations[loc][0])
});

var infowindow = new google.maps.InfoWindow();
    google.maps.event.addListener(marker, 'click', (function(marker) {
    return function() {
      infowindow.setContent(locations[loc][0]);
      infowindow.open(map, marker);
    }
  })(marker, loc));
}

$('.livLink').click(function(){
    plotMap(0);
});
$('.lonLink').click(function(){
    plotMap(1);
});
    plotMap(0);

Regarding reloading the map - at the moment the above script is triggered by 2 tab buttons - if a map is loaded and the second button is clicked the script re-runs and replaces the existing map - I'm just thinking of memory issues - should the initial map instance be stopped before loading a second?

Upvotes: 0

Views: 18915

Answers (2)

Dr.Molle
Dr.Molle

Reputation: 117314

When you think about memory issues(and also when not) it's better to re-use the Map-instance(see: Bug: Destroying Google Map Instance Never Frees Memory)

function plotMap(loc) {
    var map_container = document.getElementById('map');
    if (!map_container.map) {
        map_container.map = new google.maps.Map(map_container,

        {
            stylers: [{
                saturation: -100
            } 
            ]
        });
        map_container.marker = new google.maps.Marker();
        map_container.infowindow = new google.maps.InfoWindow();
        google.maps.event.addListener(map_container.marker, 'click', function () {
            map_container.infowindow.close();
            map_container.infowindow.open(this.getMap(), this);
        });
        map_container.infowindow.bindTo('content', map_container.marker, 'content');
    }
    map_container.infowindow.close();
    map_container.map.setOptions({
        zoom: 17,
        center: new google.maps.LatLng((locations[loc][1]), (locations[loc][2]))
    });

    //icon: 'marketICO.png',
    map_container.marker.setOptions({
        position: map_container.map.getCenter(),
        map: map_container.map,
        content: locations[loc][0],
        title: locations[loc][0]
    });
}

Upvotes: 1

MrUpsidown
MrUpsidown

Reputation: 22490

You can create 2 map instances (map1and map2 for example).

Initialize both maps on document ready (or another event) and trigger a map resize when changing tabs.

google.maps.event.trigger(map, 'resize');

Replace map by the appropriate map object (corresponding to the map on the tab you show).

Upvotes: 2

Related Questions