3

林有一些問題顯示根據變焦級別2層不同的標誌物。例如,如果縮放級別小於10,則顯示圖標a,如果縮放級別大於10,則顯示圖標2.我一直在查看標記管理器,但稍微失去了一些方向。這裏是我的代碼:谷歌地圖標記管理器

var url = "json.api"; 

function initialize() { 

    var myLatlng = new google.maps.LatLng(0, 0); 
    var myOptions = { 
     maxZoom: 16, 
     zoomControl: true, 
     disableDefaultUI: true, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    downloadUrl(url, function(data) { 

     var j = eval('(' + response + ')'); 
     var jlength = j.data.hotels.length; 

     var bounds = new google.maps.LatLngBounds(); 

     for(i=0; i < jlength; i++) { 

      var x = parseFloat(j.data.hotels[i].lat); 
      var y = parseFloat(j.data.hotels[i].lon); 
      var z = new google.maps.LatLng(x,y); 
      var title = j.data.hotels[i].title; 
      var hotel_id = j.data.hotels[i].id; 
      var address = j.data.hotels[i].address; 
      var star = j.data.hotels[i].star; 
      var thumbnail = j.data.hotels[i].thumbnail; 

      var contentstring = 'some html'; 

      var marker = createMarker(); 

      var infowindow = new google.maps.InfoWindow({ 
       content: contentstring 
      }); 

      bounds.extend(z); 

      map.fitBounds(bounds); 

      //NOT SURE IF THESE ARE NEEDED 
      // zoomChangeBoundsListener = google.maps.event.addListener(map, 'bounds_changed', function(event) { 
      // google.maps.event.removeListener(zoomChangeBoundsListener); 
      // }); 
      // google.maps.event.addListener(map, 'zoom_changed', function() { 
      // }); 
     }; 

     if (map.getZoom() == 21) {map.setZoom(16);} 

     if (map.getZoom() < 12) {map.setZoom(map.getZoom()+1);} 

     //alert(map.getZoom()) 

     function createMarker(){ 

      var marker = new google.maps.Marker({ 
       position: z, 
       map: map, 
       title: title, 
       html: contentstring, 
       icon: 'icona.png' 
      }); 

      google.maps.event.addListener(marker,'click',function(){ 
       infowindow.setContent(this.html); 
       infowindow.open(map,marker); 
      }); 
     }; 
    }); 
}; 

,你看,我有一個JSON文件,我遍歷得到lat和LNG(等位),然後創造出有信息顯示在我的JSON文件的一切標誌窗口等....我可以不只是創建第二個標記功能,即createMarker2和一些如何調用,如果變焦超過10?...任何幫助,將不勝感激。我在網上看了一些例子,但感到困惑。提前致謝。

回答

1

你有段註釋掉這是至關重要的。您需要監聽zoom_changed事件。檢查map.getZoom()將不會完成任何事情,除非它位於此事件處理程序中。

google.maps.event.addListener(map, 'zoom_changed', function() { 
    // your zoom logic goes here 
    var zoom = map.getZoom(); 
    if (zoom < 10) { 
     // do something 
    } else { 
     // do something else 
    } 
}); 

我將離開運動的其餘部分給你 - 但可能你需要每個標記添加到標記的數組,並迭代這些標誌物,然後有條件地開啓/關閉。給你一個提示 - 你可以添加額外的屬性到標記對象來檢查你什麼時候循環。例如,你可以添加一個marker.LessThan10 = true;到標記對象。然後,循環時你可以在上面查找這個屬性並調用marker.setVisible();如適用。

+0

謝謝,生病讓我們去讓你知道 – Hatzi

0

建議您通過http://www.jslint.com/運行您的代碼 - 有幾個語法錯誤(主要是跟蹤;,不需要在那裏)。

來自哪裏response?這是代碼中唯一指向它的地方:

var j = eval('(' + response + ')'); 

不要將createMarker函數嵌套在initialize函數中。使它獨立,並將創建標記和其infowindow所需的數據作爲參數傳遞給該函數。

+0

@ duncan-道歉,我試圖削減下來的代碼,您可以查看它,並錯過了位了... VAR響應= date.responseText ;,病檢查我的語法了,也嘗試你的建議。謝謝 – Hatzi