刷新时删除旧的geoxml3层

Remove older geoxml3 layers when refresh

本文关键字:geoxml3 删除 刷新      更新时间:2023-09-26

我的网页上有一个谷歌地图,并使用geoxml3来解析层(有许多placemark)。

有一个计时器,将触发jquery每10秒拉新的.kml文件。然而,我想在解析新层之前删除旧层。

问题:移除/销毁的正确方法是什么?

我知道有一个geoXml.hideDocument();,但这只是隐藏层,它不删除/破坏层,对吗?(下面是hideDocument()的实现)

refreshMap() -隐藏前一层并显示新层

$.ajax({
    url: url,
    dataType: 'json',
    type: 'get',
    contentType: 'application/x-www-form-urlencoded',
    data: "",
    success: function (data, textStatus, jQxhr) {
        if (data['success'] == 1) {
            if (geoXml) 
                geoXml.hideDocument();
            var src = data['kml'];
            geoXml = new geoXML3.parser({
                map: map,
                suppressInfoWindows: false,
                singleInfoWindow: true,
                infoWindow: infowindow,
                zoom : false
            });
            geoXml.parse(src);
            geoXml.showDocument();
        }
    },
    error: function (jqXhr, textStatus, errorThrown) {
        console.log(errorThrown);
    }
});

即使这工作,但我担心的是,如果它保持拉数据每10秒,如果页面打开1小时,它会导致任何延迟?原因是叠加层实际上并没有被破坏/删除,它们仍然在内存中,只是我们失去了对它的引用(因为现在引用指向新层)。

我在网上找到了一些信息,似乎我不必担心这个实现。

"因为Javascript是垃圾收集,你不需要删除对象本身——它们会在没有办法的时候被移除不要再提及他们了。"

我有一个测试案例这有效地做到了:

filename="http://www.geocodezip.com/dynamicmarkerkml.php";
geoXml.parse(filename);
setInterval("geoXml.hideDocument();geoXml.parse(filename)", 5000);

不会泄漏我可以看到的内存,并且我已经让它运行了几天(在某个点,而不是最近)。