2012-11-21 56 views
0

說我加載新的標誌物從外部來源,它看起來像這樣:啞劇多個標記

var markersArray = []; 

downloadUrl("eventsxml.php", function(data) { 
     var xml = data.responseXML; 
     var markers = xml.documentElement.getElementsByTagName("marker"); 
     for (var i = 0; i < markers.length; i++) { 
      var name = markers[i].getAttribute("id"); 
      var address = markers[i].getAttribute("id"); 
      var type = markers[i].getAttribute("venue_type"); 
      var point = new google.maps.LatLng(
       parseFloat(markers[i].getAttribute("lat")), 
       parseFloat(markers[i].getAttribute("lng"))); 
      var html = "<b>" + name + "</b> <br/>" + address; 
      var icon = customIcons[type] || {}; 
      var marker = new google.maps.Marker({ 
      map: map, 
      position: point, 
      icon: icon.icon, 
      shadow: icon.shadow 

      }); 
      markersArray.push(marker); 
      bindInfoWindow(marker, map, infoWindow, html); 
     } 
     }); 

我怎麼會去收集範圍的標記,然後淘洗它們全部進入視野一旦他們裝?我在google上搜索了很多東西,但沒有一個解決方案適用於我。

回答

4
  1. 創建一個空的邊界對象(google.maps.LatLngBounds
  2. 所有標記添加到它
  3. 用它來確定中心和縮放地圖

事情是這樣的:

var markersArray = []; 
// create an empty bounds object 
var bounds = new google.maps.LatLngBounds(); 

downloadUrl("eventsxml.php", function(data) { 
    var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("marker"); 
    for (var i = 0; i < markers.length; i++) { 
     var name = markers[i].getAttribute("id"); 
     var address = markers[i].getAttribute("id"); 
     var type = markers[i].getAttribute("venue_type"); 
     var point = new google.maps.LatLng(
      parseFloat(markers[i].getAttribute("lat")), 
      parseFloat(markers[i].getAttribute("lng"))); 

     // add each marker's location to the bounds 
     bounds.extend(point); 
     var html = "<b>" + name + "</b> <br/>" + address; 
     var icon = customIcons[type] || {}; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: point, 
     icon: icon.icon, 
     shadow: icon.shadow 

     }); 
     markersArray.push(marker); 
     bindInfoWindow(marker, map, infoWindow, html); 
    } 
    // center and zoom the map to fit the bounds 
    map.fitBounds(bounds); 
    }); 

要平移到邊界的中心,而不是fitBounds,請使用:

map.panTo(bounds.getCenter()); 

請注意,這不會更改地圖的縮放級別。

+1

我懷疑這不是OP詢問的問題。他以前的[問題](http://stackoverflow.com/questions/13442158/google-maps-does-not-zoom-organically-when-new-markers-areloaded)已經有了上面的代碼,他正在尋找**轉換平滑動畫**就像在'panTo()' – Cdeez

+0

嗨Cdeez。這正是我想要做的。當我將'map.fitbounds(bounds)'更改爲'map.panto(bounds)'時,出現錯誤** TypeError:map.panto不是函數** – pufAmuf

+1

Javascript區分大小寫,panto()和panTo ) 是不同的。此外,panTo(latLng:LatLng)以google.maps.LatLng作爲參數,而不是google.maps.LatLngBounds。更新答案以包含有關平移到計算邊界中心的信息。 – geocodezip