想获得标记信息的内容?

时间:2011-12-26 14:36:07

标签: javascript google-maps google-maps-api-3 infowindow

我正在使用gmap v3。我正面临一个问题。 问题是我正在创建动态标记,并且在相似的时间我创建了该标记的信息窗口。 现在我想在标记的任何信息窗口中添加一些内容。 但不知道我怎么能得到一个infowindow的内容。 我已经将我的标记对象存储在一个数组中,并且还存储了infowindow的对象。 但没有找到任何解决方案。

我希望在标记的基础上获得信息。

编辑:

var markerArray = new Array();
var infoArray = new Array();

function placemarker(point,id, contents){
var marker = new google.maps.Marker({
    icon: image,
    position: point, 
    map: map,
    title: name
});

markerArray[id] = marker;

var infoBubble = new InfoBubble();
var content = contents;
infoBubble.setContent(content);
google.maps.event.addListener(marker,"mouseover",function(event){
    for(var i=0; i < infoArray.length ; i++ )
    infoArray[i].close();
    infoBubble.open(map,marker);
});
infoArray.push(infoBubble);
}

在函数内多次调用此函数可在地图上创建标记。 现在条件是两个标记长度相同,我想显示单个标记与两个标记内容的信息。我能够创建单个标记,但无法在信息窗口中附加内容。

3 个答案:

答案 0 :(得分:2)

这已经很老了,但我想我会试一试

我不确定InfoBubble对于我使用InfoWindow的示例是什么。

function createMarker(objPoint) 
{ 
    objPoint = new google.maps.LatLng(strLat, strLng);

    strFromHtml = 'Your HTML';

    //creates the window with the options
    objInfoWindow = new google.maps.InfoWindow(
    {
        content: strToHtml,
        maxWidth: 250,
        zIndex: -1
    });

    var markerOptions = 
    {
       position: objPoint,
       map: objMap
    }

    objMarker = new google.maps.Marker(markerOptions);

    //if the marker is clicked open the window
    google.maps.event.addListener(objMarker, "click", function() 
    {
        objInfoWindow.open(objMap, objMarker);
    });
}

我首先创建窗口,然后是标记,然后我附加标记的点击监听器,以便在单击标记时在其上显示信息窗口。您可以点击并显示它,但出于我的目的,我希望他们必须点击它。

修改

好的,我已经重读了你的问题大约50次,我希望这个解决方案很好。至于一个地方的多个标记,我没有答案。我想我有一个带有自己信息的多个标记的答案。如果这不起作用,那么你将不得不在jsfiddle中创建一个例子,否则我不明白你想要什么。请在此处查看jsfiddle

创建infoWindow时,只有在保留默认内容时才创建它。所以把它放在地图本身的初始化中。然后在创建标记时,您可以使用标记本身来包含要显示的信息窗口的html。

var markerOptions =
{
  position: objPoint,
  map: objMap,
  html: strHtml//added to make the marker object store the content of the infowindow
}

然后在您的鼠标悬停监听器中使用this.html获取infowindow的内容

google.maps.event.addListener(objMarker, "mouseover", function()
{
  objInfoWindow.setContent(this.html);
  objInfoWindow.open(objMap, this);
});

一个地方的多个标记。我不得不以编程方式说你必须抓住这个并且只在一个标记中创建一个带有两者内容的标记。

答案 1 :(得分:2)

如果您已将所有InfoWindow保留在infoArray中,为什么不简单地使用与标记相同的ID存储它们?

var markers = {};
var infoWindows = {};

function placemarker(point, id, contents) {
    var marker = ...
    ...
    markers[id] = marker;

    var infoWindow = ...
    ...
    infoWindows[id] = infoWindow;
}

(请注意,我已使用哈希替换了数组。) 现在,您可以像访问标记本身一样访问每个标记的InfoWindow(及其内容通过getContent())。

答案 2 :(得分:1)

我认为不可能在谷歌地图中搜索标记(我认为这是你想要做的)。

当它们在同一点上时,你需要创建两个标记吗?如果不是,我只会跟踪点坐标为关键字的数组中的infoBubbles。因此,在创建新的infoBubble之前,请检查您是否已经有一个,如果是这种情况,您只需将其替换为新的组合infoBubble。

这是代码草案。

if(infoArray[point.lat+'_'+point.lng] != undefined){
    tmpBubble = infoArray[point.lat+'_'+point.lng];
    infoBubble = createCombinedBubble(tmpBubble, infoBubble);
}
infoArray[point.lat+'_'+point.lng] = infoBubble;