【发布时间】:2014-03-13 21:06:24
【问题描述】:
在使用 SVG 符号作为图标时,是否有好的方法可以优化 Google Maps API v3 向 HTML 文档绘制标记的方式?下面是一个使用 SVG 符号的标记示例:
var star = {
path: 'M 125,5 155,90 245,90 175,145 200,230 125,180 50,230 75,145 5,90 95,90 z',
fillColor: 'yellow'
};
var marker = new google.maps.Marker({
position: map.getCenter(),
icon: star,
map: map,
optimized: true //Does not seem to do anything..
});
Google 有一个名为“优化”的属性,可以在标记上设置,例如,当使用 PNG 图标而不是 SVG 绘图时,效果很好:Google 为每个图块创建一个画布,而不是每个图标一个 img,这显然是扩展性更好。
然而,在使用 SVG 标记时,“优化”属性似乎没有任何作用:它们似乎总是在每个标记的一个画布中绘制。当我有很多标记时,某些浏览器开始出现性能问题。 Chrome 通常可以很好地处理它,但例如 IE9 在显示出显着的性能问题之前不会处理很多标记。在这种情况下,集群不是一个选项。
有谁知道优化这个的任何好方法,以便浏览器可以同时处理更多的 SVG 标记?
【问题讨论】:
-
我使用了很多 svg 多边形标记,但是我从 svg 文件中调用它们。我不记得与路径相比是否有性能改进。值得尝试测试多边形文件与路径
-
optimized默认设置为true,我不知道为什么(在这种情况下)您会将其设置为 false;也许@geocodezip 可能会有所帮助?读到“Chrome 处理得很好,但 IE9 没有”,我并不感到惊讶,而是一个活生生的例子和/或您注意到的 性能问题 的一些细节将是一个加号。顺便说一句,好问题。 -
你知道像这样的图标在DOM中是如何呈现的吗?我可以为每个标记看到一个画布元素,例如
<canvas width="14" height="13" draggable="false" style="position: absolute; left: 0px; top: 0px; -webkit-user-select: none;"></canvas>和一个transparent.png图像。 -
也许尝试使用数据 uri?
icon: 'data:image/svg+xml;utf8,<svg width="4cm" height="4cm" viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="1" y="1" width="398" height="398" fill="none" stroke="blue" /> <path d="M 100 100 L 300 100 L 200 300 z" fill="red" stroke="blue" stroke-width="3" /> </svg>'); -
@Phil_1984_ 使用 SVG(在我的例子中)的主要原因是因为您可以通过编程方式生成图标(颜色、形状等)。有时您需要一定程度的灵活性,从而无法预先生成图像文件。
标签: javascript google-maps google-maps-api-3 svg