如何使用谷歌地图捕获页面?

时间:2010-04-01 21:09:49

标签: flex google-maps

我在汇合程序中有一个带有Google地图的UIComponent。 我需要捕获这个容器进行预览。

我的集成如下所示:

 <mx:UIComponent id="mapContainer"
        width="410"
        height="300"
    />


 googleMap = new Map();
 mapContainer.addChild(googleMap);

但如果我这样做(“这个” - 是我的UIComponent)

var bmd:BitmapData = new BitmapData(this.width, this.height, true, 0x00ffffff);
bmd.draw(this);

我看到以下内容:

An ActionScript error has occurred:
SecurityError: Error #2123: Security sandbox violation: BitmapData.draw: http://localhost/ cannot access http://mt1.google.com/vt/lyrs=m@121&hl=en&src=api&x=1&y=1&z=1&s=Gali. No policy files granted access.
    at flash.display::BitmapData/draw()

我现在,我可以将其添加到自定义客户端上允许的主机。但我需要在任何计算机上都有工作系统)

我试图隐藏它:

templateGoogleMapRenderer.mapContainer.setVisible(false);
templateGoogleMapRenderer.mapContainer.includeInLayout = false;

但是没有成功。

可能我可以覆盖我的UIComponent中的一些方法,即在BitmapData / draw()期间使用flex吗?

使用隐藏地图捕获对我来说是成功的结果

2 个答案:

答案 0 :(得分:1)

在尝试访问位图数据之前,您可能需要强制应用检查Google地图的跨域策略文件。他们的跨域政策文件位于:maps.google.com/crossdomain.xml

如果您不确定如何强制它检查跨域策略文件,您可能会觉得这很有用:http://www.abdulqabiz.com/blog/archives/2007/01/28/enabling-bitmapdatadraw-on-crossdomain-images-in-adobe-flash-player-9/

答案 1 :(得分:0)

Google Map Flash API有一个名为Map.getPrintableBitmap()的方法。如果使用此方法,则不会出现沙箱错误。示例代码:

import flash.display.BitMap;
import flash.display.BitMapData;

var bitmap:Bitmap         = googleMap.getPrintableBitmap();
var bitmapData:BitmapData = bitmap.bitmapData;

其中googleMap是您的com.google.maps.Map对象。