0

我正在使用 Google Maps JavaScript API v3 在我的 Web 应用程序中的地图上显示位置。在我的 html 中,我有:

<script src="jquery-mainpage.js"></script>
<script type="text/javascript"
    src="http://maps.googleapis.com/maps/api/js?key=AIzaSyB4LCwxrO5EzHnAQXCkP9fjREUEhOPCol4&sensor=false">
</script>

这就是我在点击更新按钮时制作地图的方式jquery-mainpage.js

$('#updatebtn').unbind("click");
$('#updatebtn').bind('click', function(){
    var keystring = $('#key').text();
    $.ajax({
        type: 'POST',
        url: 'http://localhost:8888/jsgooglemaps',
        data: {keystr: keystring},
        success: function(result) {
            var obj = jQuery.parseJSON(result);
            var centerLatLng = new google.maps.LatLng(obj.centerLat, 
                obj.centerLong);
            var myOptions = {
                center: centerLatLng,
                zoom: 17,
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                draggable: true
            };

            var map = new google.maps.Map(
                document.getElementById("map_canvas_1"),
                myOptions);

            var markerArray = obj.locations;
            for(var i=0;i<markerArray.length;i++){
                var myLatlng = new google.maps.LatLng(
                    markerArray[i].latitude, 
                    markerArray[i].longitude);
                var marker = new google.maps.Marker({
                    clickable: true,
                    position: myLatlng,
                    map: map,
                    zIndex: i
                });
                google.maps.event.addListener(marker, "click", function() {
                    var tempLatLng = new google.maps.LatLng(0, 0);
                    this.setVisible(false); 
                    this.setPosition(tempLatLng);
                    var j = this.getZIndex();
                    markerArray[j].latitude = 0;
                    markerArray[j].longitude = 0;
                });
            }
        }
    });
});

第一次点击它显示一切正确。但是当我再次单击更新按钮时,它不会正确显示地图。我附上两个屏幕截图。谁能告诉我为什么会这样。提前致谢。第一次点击地图在此处输入图像描述

当我再次单击更新按钮时映射在此处输入图像描述

4

3 回答 3

2

您不想重复创建地图的新实例,因为有一个已知错误会阻止以前地图实例的内存被垃圾收集。查看此问题以及讨论和结果答案:销毁地图实例的正确方法是什么?

在该问题的答案中,有一个视频链接,指向 Google 地图团队的 Chris Broadfoot 和 Luke Mahe 在 Google Maps Office Hours 会议期间展示的视频,该视频解释了他们不支持涉及重复创建地图实例的用例。您最好保留地图的单个实例并在整个用户会话中重复使用相同的地图。

于 2012-05-23T10:43:49.830 回答
0

我正在从 ajax 成功代码创建 map_convas_1 div,并在更新完成后将其删除。然后每当用户单击更新按钮时再次创建它。它工作正常。

于 2012-05-23T09:57:01.623 回答
0

有用。非常感谢,您的“从 div 中删除代码”选项对我有用,我的问题是第二次它不起作用,如果我调整屏幕大小它可以工作,但不是用户调整屏幕大小的自然方式看地图。

我正在使用 Jquery 删除 div 代码。在我的情况下,我使用的是 jquery 对话框,然后当我关闭对话框时,我将 div 中的 html(谷歌地图显示地图)替换为原始 div 代码。

我原来的 div 代码是

<div id="mapaLocalsub" style="width:500px; height:450px; " ></div>

我注意到,在谷歌地图工作后,它用很多东西和样式填充了 div,然后在我的 Jquery.dialog 的关闭函数中,我用我原来的 div 代码替换了 html:

$( "#mapaLocal" ).dialog({
      height: 450,
      width: 500,
      modal: true,
      close: function() {
      $( "#mapaLocal" ).html("<div id=\"mapaLocalsub\" style=\"width:500px;     height:450px; \" ></div>");
      }
});

但当然,您可以在关闭函数或创建地图之前调用的函数中使用 Jquery html 方法,希望对您有所帮助。

$( "#mapaLocal" ).html("<div id=\"mapaLocalsub\" style=\"width:500px;     height:450px; \" ></div>");
于 2016-03-03T15:51:40.427 回答