从谷歌地图中删除HeatmapLayer

我正在使用HeatmapLayer api https://developers.google.com/maps/documentation/javascript/layers#JSHeatMaps

我像这样生成热图:

heatmap = new google.maps.visualization.HeatmapLayer({ data: heatmapData, radius: 50 }); heatmap.setMap(google_map); 

当我想使用与上面相同的function显示另一个热图时(我正在使用ajax并且我有新标记要显示,所以我也需要更改热图)热图图层保留在地图上,在这种情况下我在我的地图上有2个重叠的热图。 我怎样才能首先删除当前的热门播放器?

这是我的演示代码,如果你点击地图下方的链接,就会添加热图,再次点击它,它应该删除它,但它只是一遍又一遍地重复:

http://jsfiddle.net/LpL3P/

文档建议您可以通过调用heatmap.setMap(null)来删除图层

更新

在你的jsfiddle中,你在每个click事件的范围内声明了你的heatmap变量。 为了使代码工作,我将heatmap变量全局heatmap ,然后检查以确保新的heatmap不会覆盖现有的heatmap

这是你更新的jsfiddle

对于在原始post后几年寻找解决方案的其他人,我发现以下工作。 首先将变量声明为将保存热图MVCObject的全局变量。

 var mvcObj; 

然后,在用于添加热图的function中

 if( typeof( mvcObj )=='object' ) mvcObj.clear(); /* locations is an array of latlngs */ mvcObj = new google.maps.MVCArray( locations ); /* this.map is a reference to the map object */ var heatmap = new google.maps.visualization.HeatmapLayer({ data: mvcObj, map: this.map }); 

看一下google JSHeatMaps的文档。

看看这个例子 。 您可以查看切换按钮的逻辑。

 heatmap.setMap(null) 

使用heatmap.setMap(null)只会隐藏热图图层。 如果您稍后键入heatmap.setMap(map) ,您将再次看到您的热图图层,因此它并未真正被删除。

要删除数据,您必须执行以下步骤。

heatmap.setMap(null) //这将隐藏热图图层

heatmap.getData().j = []; //这实际上是将坐标数组设置为零。

heatmap.setMap(map) //现在,当您切换回地图时,加热层消失了,您可以创建一个新的加热层。

希望这可以帮助。 我花了一段时间来搞清楚,但它确实奏效了。