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