OpenLayers仅在鼠标moveend后重绘

jet*_*hro 5 javascript openlayers

在这种情况下,我使用OpenLayers 2.10中的Map控件.在地图上的我有基体层,其是和用自定义功能.现在,当我使用鼠标移动地图时,以前不可见的功能将不会重新绘制,直到释放鼠标按钮.我在所有例子中都注意到了同样的问题.任何人都可以提供某种改变这种行为的工作吗?我想要实现的是在功能变得可见之后立即绘制功能或者总是绘制所有功能(我使用少量功能,因此地图控制的性能并不重要).OpenLayers.Layer.OSMOpenLayers.Layer.VectorOpenLayers

我目前的想法是处理地图上的一些特定事件(如点击鼠标移动)和强制功能重绘.

col*_*lin 6

更新

所述SVG2渲染器,在引入V2.11,然后立即弃用在V2.12为了可靠性的原因(参见此拉请求).对于OL> = 2.12,设置图层的ratio属性,使其在更宽的区域内渲染所有要素,作为屏幕尺寸的比例.权衡是性能,如果您的用户在某个方向"抛出"他们的地图,他们将飞过这些功能,但在那时他们可能会有一些渲染延迟.

new OpenLayers.Layer.Vector("My Layer", {
    ratio: 2
});
Run Code Online (Sandbox Code Playgroud)

原始答案

来自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"]
});
Run Code Online (Sandbox Code Playgroud)

或者在原型上设置它:

OpenLayers.Layer.Vector.renderers = ["SVG2", "VML", "Canvas"];

请注意,VML(在IE6,7,8中使用)和Canvas(在Android设备上使用)Renderer.SVG在平移时表现得像并且不绘制功能.


Nik*_*lff 0

我没有解决方案,但做了一个观察。查看OL 示例网站上的矢量行为上的此示例,如果要素部分可见(即放置在视口的边框上),则在拖入完整视图时它们仍部分隐藏。仅在释放鼠标按钮时完全可见。我的观点是,这似乎是一个显示问题,而不是负载问题,如果这还不是很明显的话......

会密切关注问题,对答案感到好奇。:-)