Google maps 谷歌地图api多标记与信息窗口

Google maps 谷歌地图api多标记与信息窗口,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我正埋头于谷歌地图API 我正试图在地图上画几个标记。完成。但是,我正在为每个标记回收一个变量/对象 我首先使用选项创建标记并添加到映射,然后使用相同的标记变量,重新调整其用途,然后再次将其添加到映射。这确实会产生两个具有单独标题标记的唯一标记 我想为每个标记显示一个信息窗口,但我不知道最好的方法是什么。我还看到将单击事件分配给每个标记时弹出一个故障标志,因为我使用相同的变量添加每个标记,我不确定如何将其单击事件添加到唯一标记(按名称,因为两者的名称相同,因为它从未收到任何id?) 为了创建信息

我正埋头于谷歌地图API

我正试图在地图上画几个标记。完成。但是,我正在为每个标记回收一个变量/对象

我首先使用选项创建标记并添加到映射,然后使用相同的标记变量,重新调整其用途,然后再次将其添加到映射。这确实会产生两个具有单独标题标记的唯一标记

我想为每个标记显示一个信息窗口,但我不知道最好的方法是什么。我还看到将单击事件分配给每个标记时弹出一个故障标志,因为我使用相同的变量添加每个标记,我不确定如何将其单击事件添加到唯一标记(按名称,因为两者的名称相同,因为它从未收到任何id?)

为了创建信息窗口,我考虑使用一个变量/对象来保持信息窗口,然后在每个标记单击事件中使用新文本重新调整其用途

我的问题是:

1:我是否应该为每个标记使用单独的唯一变量/对象(开销?),如果不是,我如何识别其单击事件

2:在弹出信息窗口对象之前,可以使用新文本重新调整信息窗口对象的用途(重新分配),还是应该为每个标记创建一个唯一的信息窗口


我有点像Java n00b,因此非常感谢您的帮助。

您说得对。拥有一个infowindow对象就像拥有一个marker对象一样。然后,信息窗口的内容将根据您单击的标记而变化。需要注意的一点是(如果在循环中创建标记,也会发生这种情况),危险在于所有的信息窗口最终都会包含最后一个窗口的内容。因此,让我们创建一个更新内容的新函数

另外,您不必对标记对象调用setMap()函数,只需在创建标记时传递的选项中指定map属性即可

var infowindow=new google.maps.infowindow({
内容:“”
});
var marker_obj=新的google.maps.marker({
职位:myLatlng,
标题:“这是标记1”,
地图:地图
});
bindInfoWindow(marker_obj、map、infowindow、“marker 1”);
marker_obj=新的google.maps.marker({
职位:myLatlng,
标题:“这是标记2”,
地图:地图
});
bindInfoWindow(marker_obj、map、infowindow、“marker 2”);
然后是一个新函数:

函数bindInfoWindow(标记、地图、信息窗口、html){
marker.addListener('click',function()){
setContent(html);
打开(地图,这个);
});
} 

创建全局信息窗口对象
var infowindow=new google.maps.infowindow()

并为全局标记添加侦听器

google.maps.event.addListener(marker, "click", function (e) {
            infowindow.setContent("set marker specific content here");
            infowindow .open(map, this);
        });

嘿,谢谢你的代码和解释。你的代码打破了第二个标记。。。。显示第一个标记,而不是没有信息窗口,第二个标记消失。。如果我删除bindInfoWindow(marker_obj,map,infowindow,'marker 1');线条,两个标记都显示。。。有什么想法吗?另外,是否有一个好的在线IDE或其他东西可以帮助我格式化java代码块等?infowindow没有定义[Break On This Error]bindInfoWindow(marker_obj,map,infowindow,“这是marker 1的信息”);在调用该函数之前,您是否记得并输入了第一位var infowindow=。。。?记住Javascript是区分大小写的,哈哈,上面没有贴花。。wokring现在像个魔咒!!!,谢谢你,伙计。另外,我计划动态构建jave脚本,然后在运行时将其注入/添加到页面中。我主要是在asp.net中开发的,我想用200个标记创建整个长java脚本,然后将脚本传递到页面。。。有什么主要的反对意见吗?如果你在做200个标记,我会说在javascript中写一个循环,创建标记并调用bindInfoWindow函数。循环应该位于ASP.net作为javascript变量创建的数组或结构上。这将确保您的Javascript更加简洁;就在我的map obj Declaration下面,但错误是infowindow不是构造函数,因为Javascript是区分大小写的,它应该是infowindow而不是infowindow谢谢,第一个eample工作了,也会测试你的,谢谢。好的,这个选项也可以。。。谢谢那么这两者中哪一个更好/更有效?
google.maps.event.addListener(marker, "click", function (e) {
            infowindow.setContent("set marker specific content here");
            infowindow .open(map, this);
        });