如何避免InfoWindow在Google Map上重叠

时间:2018-03-16 07:50:57

标签: javascript css google-maps

我已经看到了与此相似的其他问题( here ),但我无法从帖子中获取更多信息。

以下是我尝试实现的方法(取自here ),但窗口相互重叠(网站2和网站4 )。

enter image description here

以下是标记和InfoWindow位置的列表。

var locations = [
  // Array Format: Site Name, Site Info, Marker lat, Marker lng, InfoWindow lat, InfoWindow lng
  ['Site 1', '<div>'+'<h6>Site 1</h6>'+'PR 84.68 <br />'+'kWh 1618'+'</div>', 23.141162, 120.120495, 23.141162, 120.120495],
  ['Site 2', '<div>'+'<h6>Site 2</h6>'+'PR 84.68 <br />'+'kWh 1618'+'</div>', 22.711022, 120.541029, 22.711022, 120.541029],
  ['Site 3', '<div>'+'<h6>Site 3</h6>'+'PR 84.68 <br />'+'kWh 1618'+'</div>', 23.317840, 120.267284, 23.317840, 120.267284],
  ['Site 4', '<div>'+'<h6>Site 4</h6>'+'PR 84.68 <br />'+'kWh 1618'+'</div>', 22.71637, 120.54331, 24.71637, 120.54331],
];

这似乎是一个天真的解决方案...... 是否有任何可用的属性(例如 Bootstrap data-placement )可以设置InfoWindow在商标的顶部,底部,左侧或右侧侧的位置?也许我误解了。

我也尝试了setPosition但是infoWindows无法正常显示。

  function setMarkers(map,locations){

      var i

      for (i = 0; i < locations.length; i++)
      {  
        var name =  locations[i][0]
        var lat = locations[i][2]
        var long = locations[i][3]     
        var latInfo = locations[i][4]
        var longInfo =  locations[i][5]      

        var latlngset = new google.maps.LatLng(lat, long);     

        var marker = new google.maps.Marker({  
              title: name,
              position: latlngset,
              winLatLng: winLatLng,
              map: map
            });
            map.setCenter(marker.getPosition())

            var content = locations[i][1];     

        var infowindow = new google.maps.InfoWindow()

      var winLatLng = new google.maps.LatLng(latInfo, longInfo);

      google.maps.event.addListener(marker, 'click', (function(marker,content,infowindow,winLatLng){ 
            return function() {
              infowindow.setContent(content);
              infoWindow.setPosition(winLatLng);
              infowindow.open(map)               
            };
        })(marker,content,infowindow,winLatLng)); 
      google.maps.event.trigger(marker, 'click');
      }
  }

https://jsfiddle.net/ytliuSVN/4mn1qo45/

上查看我的 JSFiddle

1 个答案:

答案 0 :(得分:0)

有办法做到这一点。要移动信息窗,请使用setPosition

  

在信息窗口中调用setPosition(),或   使用InfoWindow.open()方法将信息窗口附加到新标记。

     

注意:如果在不传递标记的情况下调用open(),InfoWindow将会   使用施工时指定的位置   InfoWindowOptions对象文字。

有关infowindow的详细信息:InfoWindows

自定义InfoWindow示例:Customization