2015-04-07 27 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