OpenLayers、Decarta和Google Maps之间的性能差异

9
我们最近正在将公司的地图系统从Google地图转换到deCarta,然后再转换到OpenLayers。我们发现当向地图中添加许多元素(几千个)时(点击气泡针),OpenLayers和deCarta比Google Maps慢得多。Google有一个标记管理器,似乎可以使其更快,但我无法弄清楚这如何减少内存使用或其他任何使其表现更好的方式。这让我很疯狂,因为我们在OL和deCarta上做同样的事情,而其他地图都很慢。有没有人有使用这些系统的经验?
我知道Google是地图技术的巨头,因此投入了大量资金进行系统开发,所以它更快并不奇怪。我只是想知道如何做到这一点,如果可能的话。
谢谢!
5个回答

2
Google Maps之所以在显示如此多的标记时表现更好,主要是因为它们使用HTML5 Canvas来渲染标记,而不是每个标记都使用一个图像节点。当浏览器需要在平移或缩放时重新绘制地图时,它必须重新绘制层容器中的所有元素。元素越少,性能越好。OpenLayers对Canvas有一些支持,但我不知道是否有任何Canvas中的标记渲染器。您还必须自己检测标记上的点击,因为您不再拥有节点或标记可供单击。
在我工作的地方,我们会在服务器端生成图像,并使用老式的图像映射使图像的区域可点击。这是我们在Canvas存在之前就已经开发的解决方案,因此我不建议使用它,但它也适用于旧版浏览器。如果标记相当静态,我更愿意使用像其他人建议的WMS,或者使用Canvas自己实现。
请注意,Canvas规范仍然是草案,并且在旧版浏览器中不可用:http://caniuse.com/canvas

1

通过 OL API 放置在地图上的任何标记/几何图形都必须下载到浏览器中,然后在浏览器内存中呈现。

如果您有许多几何图形要呈现在地图上,可以使用仅包含这些几何图形的额外图像层。您可以使用类似 Geoserver 的 WMS 来实现这一点。Geoserver 与 OpenLayers 非常兼容,并且是一个非常快速的 WMS。因此,您可以将公共背景层(如 OSM 或 GoogleMaps)与自己的 WMS 层组合起来。

这种方法可能不适用于可点击的标记,但在显示任何绘制的几何图形(如多边形等)时,可以提高速度。

祝好,史蒂夫


2
根据OSGeo基准测试,MapServer通常比GeoServer快得多。 - Martijn
任何真正的WMS都将与OpenLayers(MapServer或GeoServer或其他)协同工作。这就是使用开放标准的目的! - MarkJ

1

我猜你正在使用OpenLayers.Strategy中的某个类,比如Filter或Cluster,来减少实际显示的标记数量?我没有使用过Google地图,但听起来标记管理器做了同样的事情。最终,当涉及到渲染大量dom对象时,这两个库都受到相同的浏览器限制。


0

Google Maps和Open Layers只是浏览器客户端的JS框架,这不应该有太大的区别。我认为是Google Maps服务器基础设施更加有效。此外,Marker Manager并不是一个很好的软件(它不是开源爱好者的解决方案吗?)虽然它是JS和客户端,但我使用了空间填充曲线来打造自己的集群管理器,它运行得相当不错。我敢打赌它比Marker Manager更好,因为网络上还有其他的集群解决方案,对我来说它们更好。


0

我曾经遇到过与deCarta相同的问题,当有大约800个带有气泡的标记元素时,浏览器会变慢。我向Krishna Vanka(他已不在deCarta工作)询问了此事,但没有得到任何解决方案,因此我们通过缩放参数和坐标绘制元素以及缓存屏幕外元素来构建了一个新的过滤器,这样我们就可以在内存中获得大约2000个标记。当然,这不是最好的方法,但它有效。

我们系统(GPS WebApp)中的问题在于几何图形和标记是由用户绘制的,因此额外的图像层不是可能的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接