簡體   English   中英

OpenLayers 功能僅在鼠標移動結束后重繪

[英]OpenLayers features redraw only after mouse moveend

在這種情況下,我使用OpenLayers 2.10 中的Map控件。 在地圖上,我有基礎層,即OpenLayers.Layer.OSMOpenLayers.Layer.Vector具有自定義功能。 現在,當我使用鼠標移動地圖時,以前不可見的要素在釋放鼠標按鈕之前不會重繪。 我在所有OpenLayers示例中都注意到了同樣的問題。 任何人都可以提供某種解決方法來改變這種行為嗎? 我想要實現的是在特征變得可見后立即繪制特征或始終繪制所有特征(我使用少量特征,因此地圖控制的性能並不重要)。

我目前的想法是處理地圖上的一些特定事件(如鼠標點擊移動)並強制重繪特征。

更新

SVG2渲染器是在 v2.11 中引入的,然后出於可靠性原因立即在 v2.12 中棄用(請參閱此拉取請求)。 對於 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渲染器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並且在平移時不繪制特征。

以防萬一有人偶然發現這個問題(就像我一樣)OpenLayers 2.11 解決了這個問題。 我在我的 Web 應用程序上對其進行了測試,現在它會立即重新繪制矢量特征,而安裝了舊版本的 OL 后,它會執行上面寫的操作。 我以前從未注意到過的東西,非常適合發現它!

這是發行說明。

http://trac.osgeo.org/openlayers/wiki/Release/2.11/Notes

這種表現在行動中。 恐怕我能找到的最好例子:P

http://openlayers.org/dev/examples/rotate-features.html

我沒有解決方案,但進行了觀察。 在 OL 示例網站上查看矢量行為上的這個示例,如果特征部分可見(即放置在視口的邊界上),它們在拖動到全視圖時會保持部分隱藏。 僅在釋放鼠標按鈕時完全可見。 我的觀點是,它似乎是一個顯示問題而不是負載問題,如果這還不是很明顯的話......

會關注這個問題,對答案感到好奇。 :-)

隨着OpenLayer v6.4.3你可以設置以下屬性VectorLayer

  • updateWhileAnimating 布爾值(默認為 false)當設置為 true 時,將在動畫期間重新創建功能批次。 這意味着不會顯示任何矢量被剪裁,但該設置將對大量矢量數據的性能產生影響。 設置為 false 時,將在沒有動畫處於活動狀態時重新創建批次。
  • updateWhileInteracting 布爾值(默認為 false)當設置為 true 時,將在交互期間重新創建功能批次。 另請參見 updateWhileAnimating。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM