2012-02-08 4 views
1

У меня есть карта, которая имеет флажки для пользователей, чтобы выбрать, что они хотели бы отображать на карте. Все работает хорошо, за исключением следующих двух элементов.Google Maps v3 Централизация и управление Infowindow

  1. Когда пользователь выбирает элемент из списка маркер делает изображение на карте, однако карта не повторно центр на маркер. Это необходимо для маркера, который находится за пределами видимой области карты при загрузке страницы.

  2. Когда у меня есть несколько маркеров, открытых на карте, я хотел бы иметь только 1 открытое окно, в настоящее время, если я нажму 10 маркеров, откроется 10 инфоокен. Я хотел бы иметь его там, где, если infowindow открыт, и нажимается другой маркер, тогда закрывается первое закрытие.

Я наклеил фрагмент кода для одного из маркеров ниже, любая помощь будет принята с благодарностью!

jQuery(document).ready(function(){ 
     /** 
     * The Map object. 
     * @type {google.maps.Map} 
     */ 
     var mapOptions = { 
      center: new google.maps.LatLng(36.812946,-119.746953), 
      zoom: 16, 
      mapTypeId: google.maps.MapTypeId.SATELLITE 
     }; 
     var map = new google.maps.Map(document.getElementById("map"), mapOptions); 



     /** 
     * The markers array. 
     * @type {Object} 
     */ 
     var markers = {}; 


      markers.building37 = []; 

      var marker0237 = new google.maps.Marker({ 
       visible: false, 
       icon: new google.maps.MarkerImage("images/website/brown_Marker.png",new google.maps.Size(32,37),null,null), 
       title: 'Building', 
       position: new google.maps.LatLng(36.80694607313768,-119.73590791225433), 
       center: position, 
       map: map 
      }); 

      markers.building37.push(marker0237); 

      var info_window0237 = new google.maps.InfoWindow({ 
       content: '<div id="infobubble"><div id="img"><img src="images/buildings/Foundation001.jpg" alt="Foundation Building"></div><div id="desc"><h3>Foundation</h3></div></div>', 
       maxWidth:350, 
      }); 

      google.maps.event.addListener(marker0237, "click", function() { 
       info_window0237.open(map,marker0237); 
      }); 



    var showBuilding37 = false; 

    var mgrBuilding37 = null; 


     /** 
     * Toggles Building 37 Marker Group visibility. 
     */ 
     function toggleBuilding37() 
     { 
      showBuilding37 = !showBuilding37; 
      if (showBuilding37) 
       for (var i=0; i < markers.building37.length; i++) 
        markers.building37[i].setVisible(true); 
      if (mgrBuilding37) 
      { 
       if (showBuilding37) 
       { 
        mgrBuilding37.addMarkers(markers.building37, 0); 
        mgrBuilding37.refresh(); 
       } 
       else 
       { 
        mgrBuilding37.clearMarkers(); 
        mgrBuilding37.refresh(); 
       } 
      } 
      else 
      { 
       mgrBuilding37 = new MarkerManager(map, {trackMarkers: true, maxZoom: 15}); 
       google.maps.event.addListener(mgrBuilding37, "loaded", function() { 
        if (showBuilding37) 
        { 
         mgrBuilding37.addMarkers(markers.building37, 0); 
         mgrBuilding37.refresh(); 
        } 
        else 
        { 
         mgrBuilding37.clearMarkers(); 
         mgrBuilding37.refresh(); 
        } 
       }); 
      } 
     }    

      google.maps.event.addDomListener(
       document.getElementById("building37-cb"),"click", toggleBuilding37); 

    }); 

ответ

1

Я не вижу, где вы устанавливаете центр карты.

  1. Вы должны сделать что-то вроде map.setCenter(location);, когда вы добавите маркер.

  2. Вы должны вести список информационных окон, а когда вы показываете их, прокрутите остальные и скройте их информационные окна.

    //Declare your info window array 
        var infoWindows = new Array(); 
    
        var info_window0237 = new google.maps.InfoWindow({ 
         content: '<div id="infobubble"><div id="img"><img src="images/buildings/Foundation001.jpg" alt="Foundation Building"></div><div id="desc"><h3>Foundation</h3></div></div>', 
         maxWidth:350, 
        }); 
    
        //After you make an infowindow, add it to the array 
        infoWindows.push(info_window0237); 
    
        google.maps.event.addListener(marker0237, "click", function() {       
          //When you show an infowindow on click, hide the rest 
          for(i = 0; i < indowWindows.length; i++) 
          { 
           //this will close all the infowindows you added to the array 
           infoWindows[i].close(); 
          } 
          info_window0237.open(map,marker0237); 
    
        }); 
    
+0

У меня есть вызов для начальных карт, чтобы быть центром «вар MapOptions = { центра: новый google.maps.LatLng (36,812946, -119,746953),» Я попытался добавить атрибут map.center для маркера, и он либо не автоцентрирован, либо вообще не отображает маркер 2. Я не уверен, как закодировать список инфо-окон и достичь цикла через – J4s0nn3w

+0

Когда вы добавляете маркер к коллекции маркеров. Вызовите map.setCenter (marker.location); для обновления центра карты. Я обновлю свой ответ и помогу вам со списком за секунду. – Jason

+0

CCCason, благодарю вас за обновление и за помощь в этом. Когда я добавил map.setCenter (marker0237.position), но когда я делаю это, он центрирует карту на это место при загрузке страницы не тогда, когда пользователь выбирает здание. Я с нетерпением жду вашего обновленного кода и помощи. Thank You – J4s0nn3w

Смежные вопросы