【问题标题】:google maps v3 adding an info window to a circle谷歌地图 v3 向圆圈添加信息窗口
【发布时间】:2011-09-28 21:17:14
【问题描述】:

有没有办法将 infoWindow 添加到由 google.maps.Circle 创建的圈子中

类似的东西

var circ = new google.maps.Circle({
            center:latlng,
            clickable:false,
            fillColor:colors[count],
            fillOpacity:0.3, 
            map:map,
            radius:radius,
            strokeColor:colors[count],
            strokeOpacity:0.3});

//create info window
var infoWindow= new google.maps.InfoWindow({
    content: "Your info here"
    });

//add a click event to the circle
google.maps.event.addListener(circ, 'click', function(){
//call  the infoWindow
infoWindow.open(map, circ);
}); 

或者有一种方法可以在圆的中心创建一个不可见的标记,可以点击它来访问信息窗口

【问题讨论】:

  • 或者有没有办法在圆圈的中心创建一个不可见的标记,可以点击它来访问信息窗口

标签: google-maps-api-3 infowindow


【解决方案1】:

在鼠标点击的地方设置信息窗口

google.maps.event.addListener(circ, 'click', function(ev){
    infoWindow.setPosition(ev.latLng); //<-- ev matches what you put ^ (mouse event)
    infoWindow.open(map);
});

【讨论】:

    【解决方案2】:

    您可以为您的圈子叠加设置信息窗口。但是你必须稍微调整你的代码。

    首先,必须为您的 Circle 叠加层设置 clickable=true(否则不会处理圈上的点击事件)。

    然后你必须更改点击监听器的代码。将 circle 作为函数 open() 的参数无效(Circle 不是正确的 MVCObject 类型,请阅读 InfoWindow.open() 函数的文档以获取解释)。要显示信息窗口,您必须提供其位置 - 例如点击事件的位置,圆心,....

    然后是代码

    google.maps.event.addListener(circ, 'click', function(ev){
        infoWindow.setPosition(ev.latLng);
        infoWindow.open(map);
    });
    

    google.maps.event.addListener(circ, 'click', function(ev){
        infoWindow.setPosition(circ.getCenter());
        infoWindow.open(map);
    });
    

    回答您的评论: 您可以使用不可见的标记创建技巧(只需将完全透明的图像作为标记图标),但我更喜欢使用圆形叠加的解决方案。

    【讨论】:

    • ev 代表什么?有没有办法让用户像标记中的“标题”选项一样点击圆圈
    • ev 是 MouseEvent (code.google.com/apis/maps/documentation/javascript/…)。圆形覆盖没有任何文本指示符。但是,当 clickable 为 true 时,光标会在其位于圆圈上方时发生变化。创建文本指示器并不是那么简单 - 我会使用自定义叠加层和圆圈的鼠标悬停事件侦听器来做这样的事情。
    • 我试过这种方法,但没有奏效。我收到点击事件,但无法打开 infoWindow!你还有什么提示吗?
    • 只是说如果你在循环中生成圆圈,那么而不是“infoWindow.setPosition(circ.getCenter());”你应该使用“infoWindow.setPosition(this.getCenter());”。否则,您的信息窗口将始终由循环中的最后一个圆圈弹出。
    • 它只适用于我的圈子的最后一个纬度。我有一个纬度数组并生成几个圈子。我如何确定每个圈子的内容?
    猜你喜欢
    • 2013-05-18
    • 2013-12-16
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    相关资源
    最近更新 更多