2015-04-07 55 views
0

我想知道是否有辦法獲取不是完整圖層的邊界框,而只是在地圖的當前縮放級別中可見的圖層部分?邊界框僅用於圖層的可見部分

所以,我需要獲取屏幕上繪製的圖層的邊界框的屏幕座標。我找不到實現這個目標的方法。

編輯:

不幸的是,這並沒有解決我的問題。這正是我得到最新的一點,在某些情況下它不起作用。由於stackoverflow不允許我上傳圖像,因爲我的名譽,我會嘗試描述:想象一下,我有一條路徑幾乎平行於y軸穿過屏幕,但是在屏幕外部它至少是x軸長。在這種情況下,所提出的解決方案將返回x軸的最小和最大屏幕座標,其中它需要是穿過屏幕的短間隔。在某種程度上,我需要圖層可見部分的邊界框。編輯2: 謝謝大家的回答。我試圖使用「getFeaturesInExtent」函數,但我得到一個錯誤:「Uncaught TypeError:undefined不是函數」。我正在使用最新版本爲3.4.0的OpenLayers。我想我得到這個錯誤,因爲這個函數沒有在這個版本中實現。 我使用的方法如下:

var mapExtent = map.getView().calculateExtent(map.getSize()); 
var features = result.getSource().getFeaturesInExtent(mapExtent); 

爲你建議我什麼樣的解決方案呢? (我試圖使用主版本下載ZIP:https://github.com/openlayers/ol3,但在這種情況下地圖不起作用。) 再次感謝!

+0

我不確定我是否理解正確,但調用['ol.source.Vector#getFeaturesInExtent'](http://openlayers.org/en/master/apidoc/ol.source.Vector.html#getFeaturesInExtent)地圖範圍爲您提​​供了所有可見的功能。然後你可以用這些功能來計算真實的程度。 – tsauerwein

回答

0

我發現了以下解決方案:

var mapExtent = map.getView().calculateExtent(map.getSize()); 

    var intersectedFeatures = []; 
    for (var i = 0; i < points.length; i++){ 
     if(ol.extent.containsCoordinate(mapExtent, points[i])) 
     intersectedFeatures.push(points[i]); 
    } 

    var visibleLayerExtent = ol.extent.boundingExtent(intersectedFeatures); 

謝謝大家的幫助!

1

我認爲你需要的唯一東西是視圖的範圍以及圖層和ol.extent.getIntersection()函數的範圍。

您可以通過f.ex

map.getView().calculateExtent(map.getSize()); 

您層的總體程度上

`layer.getExtent()`. 

獲取當前查看的程度和與相交的程度。

ol.extent.getIntersection(extent1, extent2,opt_extent) 

應該返回當前視圖和圖層的相交範圍。請注意,並非所有提到的功能都是穩定的。

+0

感謝您的回答。我編輯了我的問題。你可以檢查一下嗎? –

+0

這個概率是(與tsauerwein的基本正確答案有關)矢量特徵範圍方法與給定範圍相交,但它們返回整個特徵幾何的範圍。所以我認爲當特徵幾何體與非視圖區域重疊時,你會得到一個大於視圖的邊界框。我的建議是得到所有的功能,例如tsauerwein推薦它,並使用這個功能的範圍,而不是我最後一個答案的layer.getExtent()。請讓我知道你最終如何解決你的問題。 – foedchr