在这种情况下,我使用OpenLayers 2.10中的Map
控件。在地图上我有基础层
具有自定义功能的OpenLayers.Layer.OSM
和OpenLayers.Layer.Vector
。现在,当我使用鼠标移动地图时,以前不可见的功能将不会重新绘制,直到释放鼠标按钮。我在所有OpenLayers
示例中都注意到了同样的问题。任何人都可以提供某种改变这种行为的工作吗?我想要实现的是在功能变得可见之后立即绘制功能或者总是绘制所有功能(我使用少量功能,因此地图控制的性能并不重要)。
我目前的想法是在地图上处理某些特定事件(例如点击鼠标移动)并强制重绘功能。
答案 0 :(得分:6)
由于可靠性原因,v2.11中引入了SVG2
渲染器,然后立即弃用(请参阅this pull request)。对于OL> = 2.12,设置图层的ratio
属性,使其在更宽的区域内渲染所有要素,作为屏幕尺寸的比例。权衡是性能,如果您的用户在某个方向“抛出”他们的地图,他们将飞过这些功能,但在那时他们可能会有一些渲染延迟。
new OpenLayers.Layer.Vector("My Layer", {
ratio: 2
});
来自http://lists.osgeo.org/pipermail/openlayers-dev/2011-March/007345.html:
新的
OpenLayers.Renderer.SVG2
渲染器执行您要求的操作。它可以在主干上使用(将在2.11中)。要使用它,请为OpenLayers.Layer.Vector
配置渲染器数组,如下所示:new OpenLayers.Layer.Vector("My Layer", { renderers: ["SVG2", "VML", "Canvas"] });
或者在原型上设置它:
OpenLayers.Layer.Vector.renderers = ["SVG2", "VML", "Canvas"];
请注意,VML(在IE6,7,8中使用)和Canvas(在Android设备上使用)的行为类似于
Renderer.SVG
,并且在平移时不会绘制功能。
答案 1 :(得分:0)
我没有解决方案,但做了一个观察。在OL示例网站上的Vector Behavior上查看此示例,如果要素部分可见(即放置在视口的边框上),则在拖动到完整视图时它们将保持部分隐藏。仅在释放鼠标按钮时完全可见。我的观点是,这似乎是一个显示问题,而不是负载问题,如果这已经不明显......
会密切关注这个问题,对答案很好奇。 : - )
答案 2 :(得分:0)
万一有人偶然发现这个问题(正如我所做的那样),OpenLayers 2.11解决了这个问题。我在我的网络应用程序上测试了它,它现在立即重绘了矢量功能,而安装了旧版本的OL,它会执行上面所写的操作。我之前从来没有注意到的东西,要么是如此好看,要发现它!
以下是发行说明。
http://trac.osgeo.org/openlayers/wiki/Release/2.11/Notes
这种方式表明了它的实际效果。最好的例子我觉得我很害怕:P
答案 3 :(得分:0)
使用OpenLayer v6.4.3,您可以设置VectorLayer的以下属性: