2010-11-09 76 views
1

我使用的OpenLayers呈現在OpenLayers.Layer.VectorOpenLayers.Geometry.LineString。這個想法是,該行有時可能包含大量的點數,這會使瀏覽器停滯不前。我無法觸摸服務器代碼,因爲我們從外部網站檢索數據。縮放到它(增加線路的分辨率爲您放大就可以了)製作線串分辨率取決於水平的OpenLayers

有一種優雅的方式,我可以讓線具有較小的點,當你在全尺寸看到它,更多的積分?

我現在唯一的解決方案是要麼通知用戶該線路是巨大的,並詢問他是否有勇氣呈現它,或者從一開始就用更少的點建立線路,並冒險當用戶放大線時有一些問題。

+0

你能給包括線和點的例子嗎? – Myra 2010-11-09 12:04:11

+0

在你的代碼中,只有一行還是多行? – Myra 2010-11-11 08:26:24

+0

只有一條線... – 2010-11-11 09:42:10

回答

0

這使我想到的唯一的解決辦法就是手動處理這個問題,即當您最初從服務器獲取的線幾何創建將包含不同版本的幾何形狀爲你需要的每個縮放級別的陣列。

所以在陣列中你將不得不在卸下幾何第一位置從說原始幾何體的每第二個點。然後在第二位置的每個第三,第四等等...

然後你就可以聽OpenLayers.Map zoomend事件和顯示/取決於縮放級別的陣列隱藏正確的幾何形狀。

這有道理嗎?

+0

是的。這是我最終解決的那種解決方案。你的建議的問題是,它將需要大量的時間進行初始化。我想這樣做:製作一個自定義圖層,它將接收數據並根據關卡渲染它們。其缺點是,它會變得越來越慢的更深一些,你去與縮放級別,但如果用戶不感興趣變焦(他們中的大多數),它會更快。 – 2010-11-14 19:39:53

0

一個非常快速和骯髒的解決方案是創建各種層(代表或多或少點的路線),使每一個可見或不按變焦。

我把這個僞代碼的類似應用程序,我在那裏,我不想表明,當變焦比13小的方向箭頭:

vectors1 = new OpenLayers.Layer.Vector(...); 
map.addLayer(vectors1); 

// check for zoomLevel 
map.events.on({ "zoomend": function (e) { 
      if (this.getZoom() < 13) { 
       vectors1.setVisibility(false); 
      } else { 
       vectors1.setVisibility(true); 
      } 
     } 
     });