重置Google地图后,为什么我的标记不会重新显示?

时间:2013-12-12 20:15:09

标签: jquery jquery-ui google-maps google-maps-markers

我允许用户重置/重新定位地图。我发布了here.

我根据他们选择的复选框添加了应该重新加载标记的代码。

为了让您知道我在说什么,这里是一个屏幕截图,显示该网站首次显示时的外观:

enter image description here

如果我从下拉列表中选择不同的视图(任何州或美国50+),我可以选择一个复选框或复选框,它/它们将起作用,但我的代码应根据哪个复选框重绘标记已被点击的人没有。

以下是从下拉列表中选择项目时重新定位地图的代码:

$('#stateSelector').on("change",function() {
    var $this = $(this).val();
    if ($this == "USA (48)")
    {
        LoadUSA48();
    }
    else if ($this == "USA (50+)")
    {
        LoadUSA50();
    }
    else if ($this == "Alabama")
    {
        LoadAlabama();
    }
    . . .
    else if ($this == "Wyoming")
    {
        LoadWyoming();
    }
});

以下是Load()方法的示例:

function LoadAlabama() {
    $("#map").removeData();
    $("#map").goMap({ 
        latitude: 32.806673, 
        longitude: -86.791133, 
        zoom: 8 
    }); 
}

在select事件结束时调用了一个ReloadMarkers()方法:

function ReloadMarkers() {
    if ($('#NFLCheckbox').is(':checked')) {
        ShowNFLMarkers();
    }

    . . .

    if ($('#AmMusiciansCheckbox').is(':checked')) {
        ShowMusiciansMarkers();
    }
}

ShowX()方法包含以下所有类型的代码:

$.goMap.createMarker({
    address: 'Green Bay, Wisconsin',
    title: 'Green Bay Packers',
    group: 'NFLGroup',
    icon: constants.nflIcon,
    html: getPackers()
});

就好像没有识别复选框的选中状态......

1 个答案:

答案 0 :(得分:1)

因为在你的LoadAlabama()函数中,地图正在重新初始化。标记与旧地图对象相关联。从下拉列表中更改选项时,新地图对象没有与之关联的任何标记。因此showHide不起作用(因为地图上还没有标记)。

最好的解决方案是将地点的lat-long值存储在一个对象或数组中,我猜你已经在做了。当您重新初始化地图时,您需要迭代标记并为需要显示的标记设置地图。像这样的东西

function setMapForMarkers (mapMarkers) {
    $(mapMarkers).each(function(i, elm) {
        elm.setMap(myMap);
    });
}

function ReloadMarkers() {
    if ($('#NFLCheckbox').is(':checked')) {
         setMapForMarkers(NFLGroupMarkers);    //NFL Group markers should be an array containing the markers that need to be displayed.
    } else {
         //whatever set of markers you want to display here
    }

}

您可以参考此作为工作示例 https://developers.google.com/maps/documentation/javascript/examples/marker-remove