1

我有一个地图页面,它使用 Google Maps Javascript APIs v3 和 geoxml3 解析器来解析服务器生成的 KML 文档。

当我用新的 KML 刷新地图时,我想在显示新文件之前“清理”地图。

我的代码目前的工作方式如下:

//Init parser
var myParser = new geoXML3.parser({map: me.map});

//On map refresh
if (myParser.docs[0] != undefined)
{
    Ext.each(myParser.docs, function(doc){
        Ext.each(doc.gpolygons, function(gpolygon){
            gpolygon.setMap(null);
        });
        Ext.each(doc.placemarks, function(placemark){
            if (placemark.polygon != undefined) placemark.polygon.setMap(null);
            if (placemark.marker != undefined) placemark.marker.setMap(null);
        });
    });
}

这成功地清理了多边形和地标。但是,如果我在清理地图之前单击多边形,工具提示仍然存在。这是一个截图

地图截图

在您看到地标“004_ALBINO”的地方,刷新地图后清理了一个多边形。另一个工具提示“400”在刷新地图之前显示,并且没有被清理 - 至少它本身下面有一个有效的多边形。

更新地图时如何关闭工具提示?

4

1 回答 1

0

这应该关闭 geoxml3 拥有的任何信息窗口(应该处理这两种情况,单个信息窗口或每个对象的信息窗口)。您不需要对 gpolygons 数组的所有成员和所有 placemark.polygon 对象都调用 .setMap(null) ,这是做同一件事的两种不同方式。

//Init parser
var myParser = new geoXML3.parser({map: me.map});

//On map refresh
if (myParser.docs[0] != undefined)
{
    Ext.each(myParser.docs, function(doc){
        Ext.each(doc.placemarks, function(placemark){
            if (placemark.polygon != undefined) {
              placemark.polygon.setMap(null);
              placemark.polygon.infoWindow.close();
            }
            if (placemark.marker != undefined) {
              placemark.marker.setMap(null);
              placemark.marker.infoWindow.close();
            }
        });
    });
}
于 2013-12-05T01:50:52.610 回答