Javascript OpenLayers功能仅在鼠标移动结束后重新绘制

Javascript OpenLayers功能仅在鼠标移动结束后重新绘制,javascript,openlayers,Javascript,Openlayers,在本例中,我使用2.10中的Map控件。在地图上我有基础层 这是带有自定义功能的OpenLayers.Layer.OSM和OpenLayers.Layer.Vector。现在,当我使用鼠标移动地图时,以前看不到的功能在释放鼠标按钮之前不会重新绘制。我在所有OpenLayers示例中都注意到了相同的问题。有人能提供一些方法来改变这种行为吗?我想要实现的是在特征变得可见后立即绘制特征,或者始终绘制所有特征(我使用少量特征,所以地图控制的性能并不重要) 我目前的想法是处理地图上的一些特定事件(如鼠标点

在本例中,我使用2.10中的
Map
控件。在地图上我有基础层 这是带有自定义功能的
OpenLayers.Layer.OSM
OpenLayers.Layer.Vector
。现在,当我使用鼠标移动地图时,以前看不到的功能在释放鼠标按钮之前不会重新绘制。我在所有
OpenLayers
示例中都注意到了相同的问题。有人能提供一些方法来改变这种行为吗?我想要实现的是在特征变得可见后立即绘制特征,或者始终绘制所有特征(我使用少量特征,所以地图控制的性能并不重要)


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

我没有解决方案,但观察到了。在OL Examples网站上查看此示例,如果特征部分可见(即放置在视口的边界上),则在拖动到完整视图中时,它们仍然部分隐藏。仅在释放鼠标按钮时完全可见。我的观点是,这似乎是一个显示问题,而不是负载问题,如果这还不明显的话


将密切关注问题,对答案充满好奇。:-)

为了防止有人偶然发现这个问题(就像我做的那样),OpenLayers 2.11解决了这个问题。我在我的web应用程序上测试了它,现在它可以立即重新绘制矢量特性,而在安装了旧版本的OL后,它可以完成上面所写的工作。这是我以前从未注意到的东西,也是我发现它的好东西

这是发行说明

这在行动上显示了这一点。恐怕我能找到的最好的例子是:P

更新
SVG2
渲染器是在v2.11中引入的,出于可靠性原因,随后在v2.12中立即弃用了(请参阅)。对于OL>=2.12,设置层的
比率
属性,使其以屏幕大小的比率呈现更宽区域内的所有特征。取舍是性能,如果用户向某个方向“抛出”地图,他们将飞过这些功能,但在这一点上,他们可能会有一些渲染延迟

new OpenLayers.Layer.Vector("My Layer", {
    ratio: 2
});
原始答案 发件人:

新的
OpenLayers.Renderer.SVG2
Renderer执行您的请求。它在主干上可用(将在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
,在平移时不绘制功能


使用OpenLayer v6.4.3,可以设置的以下属性:

  • updateWhileAnimating boolean(默认值为false)当设置为true时,将在动画期间重新创建要素批次。这意味着不会显示裁剪的矢量,但该设置将对大量矢量数据的性能产生影响。如果设置为false,则在没有活动动画时将重新创建批
  • updateWhileInteracting boolean(默认为false)当设置为true时,将在交互期间重新创建功能批次。另请参见更新时的图像处理

您的“隐藏”功能是否已经在客户端上,或者您是否在使用鼠标移动地图时获取它们?如果你发布一些你正在使用的代码,你会更容易找到解决方法。我也需要一个解决这个问题的方法。也许有人能帮上忙。我想投赞成票,但这应该是评论,而不是回答。嗯。。。在这个“例子”中,我仍然看到了这个问题。拖动地图,使矢量完全脱离页面并松开。然后将地图拖回原来的位置-在放开鼠标之前,功能不会重新出现。我必须承认,升级到OL2.12后,我确实注意到这一点发生了变化,但我认为这只是我的设置出了问题,对我来说也没那么重要。很高兴在你的回答中看到你的解释。