admin管理员组

文章数量:1531231

2024年6月6日发(作者:)

Google地图API文档

减少浏览器内存泄露

Google 地图 API 鼓励使用函数闭包(匿名函数)。由于 API 的

事件处理机制会把事件关联到 DOM 结点上,这不可避免地会导致一

些浏览器内存泄露,尤其是在 Internet Explorer 中。第 2 版的 API 引

入了一个新的方法:GUnload(),它会消除大多数导致内存泄露的循

环引用。 因此,您应该在您的网页的 unload 事件中调用 GUnload()

方法,以避免您应用程序可能带来的内存泄露问题。

这个函数可以消除 Google 地图在 Internet Explorer 下的内存泄

露,但是如果您特别关心内存消耗问题,您仍旧应该用 Drip 等工具测

试您自己网站的内存泄露情况。

编码折线

Google 地图中,GPolyline 对象是用一系列的点表示的,这种方

法虽然简单易用但是不够简洁。当需要表示长且复杂的折线时会消耗

大量的内存,而且绘制起来也很慢。此外,这种折线的每一条线段在

地图的每个缩放级别中都可见,尽管在较低的分辨率下这是完全没有

必要的。

鉴于此,Google 地图 API 也允许您用编码折线来表示路径。编

码折线用一个压缩格式的 ASCII 字符串来表现一系列的点。编码折线

还允许您指定线段的可见缩放级别;这样您就可以指定在各种的缩放

级别下如何表现折线的细节。虽然这种方法用起来有些复杂,但是它

可以让地图的绘制效率更高。

例如,有 3 个点的 GPolyline 对象通常为:

var polyline = new GPolyline([

new GLatLng(39.4419, 116.1419),

new GLatLng(39.4519, 116.1519),

new GLatLng(39.4619, 116.1819)

], "#FF0000", 10);

rlay(polyline);

而与之对应的编码 GPolyline 对象则如下:(请暂时不要关心编

码算法的细节)

var encodedPolyline = new coded({

color: "#FF0000",

weight: 10,

points: "ynvoF{}zcUq}@m}@m}@ozD",

levels: "BBB",

zoomFactor: 32,

numLevels: 4

});

rlay(encodedPolyline);

需要注意的两点是:

1. 首先,编码折线是用一系列的 ASCII 字符来表示一系列的点,

正如基本的 GPolyline 对象用一系列经纬度来表示那样。为点序列创

建对应 ASCII 编码的算法可以在这里找到(英文)。如果您需要动态

地在服务器上计算这些编码的话,那么就需要了解这个算法。但是,

如果您仅仅需要将现有点的经纬度转换成编码,那么可以直接使用我

们提供的交互工具(英文)。

2. 其次,编码折线允许您指定每个线段的最高可见缩放级别。如

果一个点在更高的缩放级别中不可见,那么折线会自动地连接上一个

可见点和下一个可见点。注意,这个特性是普通折线不支持的,在较

宏观的缩放级别上,它对于加快折线绘制速度非常有利,因为折线的

一些细节无需表现出来。例如,当地图缩放到省级的时候,一条用于

表现从北京市到上海市驾驶路线的编码折线,就不需要表现出北京市

内的具体街道了。

查看示例 ()

本文标签: 折线内存编码泄露表现