Google Maps infoWindow的错误定位

时间:2014-11-06 23:07:45

标签: google-maps infowindow

我在http://arquitectospelomundo.com有一个网站,它显示了几个标记,由markerclusterer函数组合在一起,当点击它时会显示一个包含一些信息的信息窗口。直接点击地图时,信息窗口会出现在正确的位置;但是当点击侧边栏(在其中一张图片上)时,信息窗口会超出范围。 这是正常的,突然改变了;我想弄清楚,但到目前为止没有成功。我很感激任何指导我正确方向的帮助。 谢谢。

2 个答案:

答案 0 :(得分:1)

因为看起来这个问题与MarkerClusterer有关。

当触发点击的标记位于群集内时,标记的map-property为null,并且您的位置错误。

可能的解决方案:

当标记在群集中时,使用隐藏标记(通过visible隐藏)作为infoWindow的锚点:

google.maps.event.addListener(marker, 'click', function() {
   //create the dummy-marker on first click
   if(!map.get('dummy')){
     map.set('dummy',new google.maps.Marker({map:map,visible:false}))
   }
   var latLng = marker.getPosition();

   //when the marker is within a cluster
   if(!marker.getMap()){
    //set position of the dummy
    map.get('dummy').setPosition(latLng);
    //use dummy as infowindow-anchor
    marker= map.get('dummy');
   }
    map.panTo(latLng);
    infowindow.setContent(contentString);
    infowindow.open(map,marker);

});

答案 1 :(得分:0)

我遇到了与Marker群集器相同的问题以及对地图的外部点击,打开了infowindows。 @ Dr.Molle使用虚拟标记的解决方案是一个很好的方向,但问题是您可以使用虚拟平移到平移,但是侦听器会触发不在地图上的标记上的单击。正确的infowindow打开,但autopan功能无法知道平移到哪里,所以它保持在最后一次点击后的位置。这是从地图外重复点击的问题。第一次点击没问题,但第二次或第三次点击是错误的,如果是在群集中则依赖于它。

我找到的解决方案是测试标记是否在集群中,如果是,则将其附加到地图上,并在点击后将其删除(不确定是否有必要,可能是为了防止地图变慢)。我把它放在从外面每次点击调用的函数中。但也许你也可以将它构建到事件监听器中。这对我很有用:

function openInfoWindow(id){

    googlemap.setZoom(13);
    var marker = markers[id];
    var latLng = marker.getPosition();

    if(!marker.getMap()){ //if the clicked marker is in a cluster, so it is not attached to a map

        marker.setMap(googlemap); //attach it to the map
        google.maps.event.trigger(marker, 'click'); // the standard trigger, opens infowindow 
        googlemap.panTo(latLng); 
        marker.setMap(null); //detach it from the map (not sure if necessary

    } else {

        google.maps.event.trigger(marker, 'click'); 
        googlemap.panTo(latLng);

    }

    return false;
}